home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / amos / gamelinker.amos / gamelinker.amosSourceCode
AMOS Source Code  |  1997-01-31  |  87KB  |  4,380 lines

  1. Set Buffer 300
  2.  
  3. Reserve As Work 15,500000
  4.  
  5. ALMAX=19
  6.  
  7. Dim LEVNAME$(15),OBJGFX$(29),SFX$(59),BULNAME$(19),VOI(19),BGV(19),BLT(19)
  8. Dim VECGFX$(29),WALLGFX$(15),WALLHEIGHT(15),GFXTYPE$(10),GUNOBJ(9)
  9. Dim AIC(19),DBB(19),BOW(19),BOFC(19),BDV(19),NOB(19),BEF(19),BMS(19),BGT(19),IGT(19)
  10. Dim GUNNAME$(9),GUNBUL(9),BULANIM(19,1,19,5),BULF(19,1),ALNAME$(ALMAX),ALSTAT(ALMAX,20)
  11. Dim OGFRAMES(29,63,3),DEFB$(9),RESB$(9),FOLB$(9),RETB$(9),OBNAME$(30),OBSTAT(30,19)
  12. Dim OBDEFAF(30,20,5),GSFX(9),BSFX(19),ISFX(19)
  13. Dim OBACTAF(30,20,5),BACKSFX(15)
  14. Dim ALBRIGHT(19),FLOORHURT(15),FLOORNOISE(15)
  15. Dim ALANIM(ALMAX,10,19,10),ALSHOTXOFF(19),ALSHOTYOFF(19)
  16. Dim LEVMUSIC$(15),ECHO(59)
  17. ' ammo 0=health 1=jetpack fuel 
  18. ' gun 0=shield 1=jetpack 
  19. Dim AMMOGIVE(30,21),GUNGIVE(30,11)
  20.  
  21. GFXTYPE$(0)="Bitmap"
  22. GFXTYPE$(1)="Vector"
  23. GFXTYPE$(2)="Lightsourced palette 1"
  24. GFXTYPE$(3)="Lightsourced palette 2"
  25. GFXTYPE$(4)="Lightsourced palette 3"
  26. GFXTYPE$(5)="Lightsourced palette 4"
  27.  
  28. RED=1
  29. WHITE=2
  30. GREEN=3
  31.  
  32. Global MP,LEVNAME$(),OBJGFX$(),SFX$(),BULNAME$(),VOI(),BGV(),BLT()
  33. Global VECGFX$()
  34. Global AIC(),DBB(),BOW(),BOFC(),BDV(),NOB(),BEF(),BMS(),ALNAME$(),BGT(),IGT()
  35. Global GUNNAME$(),GUNBUL(),BULANIM(),BULF(),ALSTAT()
  36. Global OGFRAMES(),RED,WHITE,GREEN,ALANIM(),GUNOBJ()
  37.  
  38. SFX$(59)="* RESERVED FOR FOOTSTEP SOUNDS *"
  39.  
  40. DEFB$(0)="Prowl Randomly             "
  41. DEFB$(1)="Fly Randomly               "
  42.  
  43. RESB$(0)="Charge                     "
  44. RESB$(1)="Charge To Side             "
  45. RESB$(2)="Attack with Gun            "
  46. RESB$(3)="Charge (Flying)            "
  47. RESB$(4)="Charge To Side (Flying)    "
  48. RESB$(5)="Attack with Gun (Flying)   "
  49.  
  50. FOLB$(0)="Pause                      "
  51. FOLB$(1)="Approach                   "
  52. FOLB$(2)="Approach To Side           "
  53. FOLB$(3)="Approach (Flying)          "
  54. FOLB$(4)="Approach To Side (Flying)  "
  55.  
  56. RETB$(0)="Pause                      "
  57. RETB$(1)="Attack To Side (unarmed)   "
  58. RETB$(2)="Guard Start Control Pt     "
  59.  
  60.  
  61. For A=0 To 15
  62.    B$=Chr$(65+A)
  63.    '            1234567890123456789**2345678901234567890
  64.    LEVNAME$(A)="                LEVEL  "+B$+"                "
  65. Next 
  66.  
  67. For A=0 To 19
  68.    BULNAME$(A)="BULLET TYPE "+Chr$(A+65)
  69. Next 
  70. For A=0 To ALMAX
  71.    ALNAME$(A)="ALIEN "+Chr$(A+65)
  72.    For B=0 To 10
  73.       ALANIM(A,B,0,8)=-1
  74.       For C=1 To 19
  75.          ALANIM(A,B,C,0)=-1
  76.          ALANIM(A,B,C,8)=-1
  77.    Next : Next 
  78. Next 
  79.  
  80. For A=0 To 9
  81.    GUNBUL(A)=A
  82.    GUNNAME$(A)="GUN "+Chr$(A+65)
  83. Next 
  84.  
  85. LEVELDIR$=""
  86. FTMNAME$=""
  87. GGNAME$=""
  88. BLURB$=""
  89.  
  90. Screen Open 0,640,256,4,Hires
  91. Flash Off : Cls 0
  92. Wait Vbl 
  93. Limit Mouse 
  94.  
  95. Set Curs %111100,%1000010,%10100101,%10100101,%10000001,%10100101,%1011010,%111100
  96.  
  97. Colour 1,$F44
  98. RED=1
  99. Colour 2,$FFF
  100. WHITE=2
  101. Colour 3,$F0
  102. GREEN=3
  103. Menu$(1)="(IN 1,0)FILE    "
  104. Menu$(1,1)="(IN 1,0)Load Default        "
  105. Menu$(1,2)="(IN 1,0)Load Game Link File "
  106. Menu$(1,3)="(IN 1,0)Save Game Link File "
  107. Menu$(1,4)=" "
  108. Menu$(1,5)="(IN 1,0)Quit                "
  109. Menu$(2)="(IN 1,0)EDIT:-  "
  110. Menu$(2,1)="(IN 1,0)LEVELS   ->"
  111. Menu$(2,2)="(IN 1,0)GRAPHICS ->"
  112. Menu$(2,3)="(IN 1,0)VECTORS  ->"
  113. Menu$(2,4)="(IN 1,0)SAMPLES  ->"
  114. Menu$(2,5)="(IN 1,0)BULLETS  ->"
  115. Menu$(2,6)="(IN 1,0)GUNS     ->"
  116. Menu$(2,7)="(IN 1,0)ALIENS   ->"
  117. Menu$(2,8)="(IN 1,0)OBJECTS  ->"
  118. Menu$(2,9)="(IN 1,0)PLAYERS  ->"
  119. Menu$(2,10)="(IN 1,0)MISC     ->"
  120.  
  121. Menu$(2,1,1)="(IN 1,0)Set Levels Directory    "
  122. Menu$(2,1,2)="(IN 1,0)Change Level Names      "
  123. Menu$(2,2,1)="(IN 1,0)Set Object GFX Frames   "
  124. Menu$(2,2,2)="(IN 1,0)Set Floor Tile Filename "
  125. Menu$(2,2,3)="(IN 1,0)Set Wall GFX Filenames  "
  126. Menu$(2,2,4)="(IN 1,0)Set Texture Filename    "
  127.  
  128. Menu$(2,3,1)="(IN 1,0)Set Vector Filenames "
  129.  
  130. Menu$(2,4,1)="(IN 1,0)Set SFX Filenames     "
  131. Menu$(2,4,2)="(IN 1,0)Select Background SFX "
  132. Menu$(2,4,3)="(IN 1,0)Define Echoed SFX     "
  133.  
  134. Menu$(2,5,1)="(IN 1,0)Define Bullet Data"
  135.  
  136. Menu$(2,6,1)="(IN 1,0)Define Gun Types"
  137.  
  138. Menu$(2,7,1)="(IN 1,0)Define Alien Stats"
  139.  
  140. Menu$(2,8,1)="(IN 1,0)Define Object Stats"
  141.  
  142. Menu$(2,9,1)="(IN 1,0)Define Player Stats"
  143.  
  144. Menu$(2,10,1)="(IN 1,0)Define Floor Damage Values  "
  145. Menu$(2,10,2)="(IN 1,0)Define Floor Footstep Sounds"
  146. Menu$(2,10,3)="(IN 1,0)Select Level Music Files    "
  147.  
  148. Menu On 
  149.  
  150. Gosub ROSCRN
  151.  
  152. Repeat 
  153.    Repeat 
  154.    Until Choice
  155.    If Choice(1)=1
  156.       If Choice(2)=5
  157.          End 
  158.       End If 
  159.       If Choice(2)=3
  160.          Gosub LINKFILESAVE
  161.       End If 
  162.       If Choice(2)=2
  163.          Gosub LINKFILELOAD
  164.       End If 
  165.    End If 
  166.    If Choice(1)=2
  167.       If Choice(2)=1
  168.          If Choice(3)=1
  169.             Gosub SETLEVELS
  170.          End If 
  171.          If Choice(3)=2
  172.             Gosub SETLEVELNAMES
  173.          End If 
  174.       End If 
  175.       If Choice(2)=2
  176.          If Choice(3)=1
  177.             Gosub SETOBJGFXNAMES
  178.          End If 
  179.          If Choice(3)=2
  180.             Gosub SETFLOORTILENAME
  181.          End If 
  182.          If Choice(3)=3
  183.             Gosub SETWALLNAMES
  184.          End If 
  185.          If Choice(3)=4
  186.             Gosub SETTEXNAME
  187.          End If 
  188.       End If 
  189.       If Choice(2)=3
  190.          If Choice(3)=1
  191.             Gosub SETVECTORNAMES
  192.          End If 
  193.       End If 
  194.       If Choice(2)=4
  195.          If Choice(3)=1
  196.             Gosub SETSFXNAMES
  197.          End If 
  198.          If Choice(3)=2
  199.             Gosub SETBACKSFX
  200.          End If 
  201.          If Choice(3)=3
  202.             Gosub SETECHOSFX
  203.          End If 
  204.       End If 
  205.       If Choice(2)=5
  206.          If Choice(3)=1
  207.             Gosub SETBULLETDATA
  208.          End If 
  209.       End If 
  210.       If Choice(2)=6
  211.          If Choice(3)=1
  212.             Gosub SETGUNBULLETS
  213.          End If 
  214.       End If 
  215.       If Choice(2)=7
  216.          If Choice(3)=1
  217.             Gosub SETALIENNAME
  218.          End If 
  219.       End If 
  220.       If Choice(2)=8
  221.          If Choice(3)=1
  222.             Gosub SETOBJNAME
  223.          End If 
  224.       End If 
  225.       If Choice(2)=9
  226.          If Choice(3)=1
  227.             Gosub SETPLAYERSTATS
  228.          End If 
  229.       End If 
  230.       If Choice(2)=10
  231.          If Choice(3)=1
  232.             Gosub SETFLOORDAMAGE
  233.          Else If Choice(3)=2
  234.             Gosub SETFLOORSFX
  235.          Else 
  236.             Gosub PICKLEVELMUSIC
  237.          End If 
  238.       End If 
  239.    End If 
  240. Until 0
  241.  
  242. End 
  243.  
  244. Procedure LK[VA]
  245.    Loke MP,VA
  246.    Add MP,4
  247. End Proc
  248. Procedure DK[VA]
  249.    Doke MP,VA
  250.    Add MP,2
  251. End Proc
  252. Procedure PK[VA]
  253.    Poke MP,VA
  254.    Add MP,1
  255. End Proc
  256.  
  257. LINKFILESAVE:
  258.  
  259. MP=Start(15)
  260.  
  261. ' 0-63=Path of level directory 
  262.  
  263. For A=1 To 64
  264.    If A<=Len(LEVELDIR$) Then PK[Asc(Mid$(LEVELDIR$,A,1))] Else PK[0]
  265. Next 
  266.  
  267. Print MP-Start(15);" Level Names"
  268.  
  269. For A=0 To 15
  270.    For B=1 To 40
  271.       PK[Asc(Mid$(LEVNAME$(A),B,1))]
  272.    Next 
  273. Next 
  274.  
  275. Print MP-Start(15);" Object gfx filenames"
  276.  
  277. For A=0 To 29
  278.    For B=1 To 64
  279.       If B<=Len(OBJGFX$(A)) Then PK[Asc(Mid$(OBJGFX$(A),B,1))] Else PK[0]
  280.    Next 
  281. Next 
  282.  
  283.  
  284. Print MP-Start(15);" SFX filenames"
  285.  
  286. For A=0 To 59
  287.    For B=1 To 64
  288.       If B<=Len(SFX$(A)) Then PK[Asc(Mid$(SFX$(A),B,1))] Else PK[0]
  289.    Next 
  290. Next 
  291.  
  292. Print MP-Start(15);" floor tile filename"
  293.  
  294. For A=1 To 64
  295.    If A<=Len(FTMNAME$) Then PK[Asc(Mid$(FTMNAME$,A,1))] Else PK[0]
  296. Next 
  297.  
  298. For A=1 To 64
  299.    If A<=Len(TEXNAME$) Then PK[Asc(Mid$(TEXNAME$,A,1))] Else PK[0]
  300. Next 
  301.  
  302. Print MP-Start(15)
  303.  
  304. Add MP,64*2
  305.  
  306. Print MP-Start(15);" gun filename"
  307.  
  308. For A=1 To 64
  309.    If A<=Len(GGNAME$) Then PK[Asc(Mid$(GGNAME$,A,1))] Else PK[0]
  310. Next 
  311.  
  312. Print MP-Start(15);" blurb filename"
  313.  
  314. For A=1 To 64
  315.    If A<=Len(BLURB$) Then PK[Asc(Mid$(BLURB$,A,1))] Else PK[0]
  316. Next 
  317.  
  318. Print MP-Start(15);" bullet animation data"
  319.  
  320. For A=0 To 19
  321.    LK[VOI(A)] : LK[BGV(A)] : LK[BLT(A)] : LK[AIC(A)]
  322.    LK[BOW(A)] : LK[BOFC(A)] : LK[BDV(A)] : LK[BEF(A)]
  323.    LK[BMS(A)] : LK[BULF(A,0)] : LK[BULF(A,1)]
  324.    LK[BSFX(A)] : LK[ISFX(A)] : LK[BGT(A)] : LK[IGT(A)]
  325.    For G=0 To 1
  326.       For B=0 To 19
  327.          For C=0 To 5
  328.             PK[BULANIM(A,G,B,C)]
  329.          Next 
  330.       Next 
  331.    Next 
  332. Next 
  333.  
  334. Print MP-Start(15);" Bullet Names"
  335.  
  336.  
  337. For A=0 To 19
  338.    For B=1 To 20
  339.       If B<=Len(BULNAME$(A))
  340.          PK[Asc(Mid$(BULNAME$(A),B,1))]
  341.       Else 
  342.          PK[0]
  343.       End If 
  344.    Next 
  345. Next 
  346.  
  347. Print MP-Start(15);" Gun names"
  348.  
  349. For A=0 To 9
  350.    For B=1 To 20
  351.       If B<=Len(GUNNAME$(A))
  352.          PK[Asc(Mid$(GUNNAME$(A),B,1))]
  353.       Else 
  354.          PK[0]
  355.       End If 
  356.    Next 
  357. Next 
  358.  
  359. Print MP-Start(15);" Bullet type used in each gun"
  360.  
  361. For A=0 To 9
  362.    DK[GUNBUL(A)]
  363.    DK[DBB(A)]
  364.    DK[NOB(A)]
  365.    DK[GSFX(A)]
  366. Next 
  367.  
  368. Print MP-Start(15);" Names for each alien"
  369.  
  370. For A=0 To ALMAX
  371.    For B=1 To 20
  372.       If B<=Len(ALNAME$(A))
  373.          PK[Asc(Mid$(ALNAME$(A),B,1))]
  374.       Else 
  375.          PK[0]
  376.       End If 
  377.    Next 
  378. Next 
  379.  
  380. Print MP-Start(15);" Stats for each alien type"
  381.  
  382. For A=0 To ALMAX
  383.    For B=0 To 20
  384.       DK[ALSTAT(A,B)]
  385.    Next 
  386. Next 
  387.  
  388. Print MP-Start(15);" Data for graphics frames"
  389.  
  390. For A=0 To 29
  391.    For B=0 To 31
  392.       DK[OGFRAMES(A,B,0)]
  393.       DK[OGFRAMES(A,B,1)]
  394.       DK[OGFRAMES(A,B,2)/2]
  395.       DK[OGFRAMES(A,B,3)/2]
  396.    Next 
  397. Next 
  398.  
  399. Print MP-Start(15);" Names for each object type"
  400.  
  401. For A=0 To 29
  402.    For B=1 To 20
  403.       If B<=Len(OBNAME$(A))
  404.          PK[Asc(Mid$(OBNAME$(A),B,1))]
  405.       Else 
  406.          PK[0]
  407.       End If 
  408.    Next 
  409. Next 
  410.  
  411. Print MP-Start(15);" Object Statistics"
  412.  
  413. For A=0 To 29
  414.    For B=0 To 19
  415.       DK[OBSTAT(A,B)]
  416.    Next 
  417. Next 
  418.  
  419. Print MP-Start(15);" Object default anim data"
  420.  
  421. For A=0 To 29
  422.    For B=0 To 19
  423.       For C=0 To 5
  424.          PK[OBDEFAF(A,B,C)]
  425.       Next 
  426.    Next 
  427. Next 
  428.  
  429. Print MP-Start(15);" Object activated anim data"
  430.  
  431. For A=0 To 29
  432.    For B=0 To 19
  433.       For C=0 To 5
  434.          PK[OBACTAF(A,B,C)]
  435.       Next 
  436.    Next 
  437. Next 
  438.  
  439. Print MP-Start(15);" Ammo collected from objects"
  440.  
  441. For A=0 To 29
  442.    For B=0 To 21
  443.       DK[AMMOGIVE(A,B)]
  444.    Next 
  445. Next 
  446.  
  447. Print MP-Start(15);" Guns collected from objects"
  448.  
  449. For A=0 To 29
  450.    For B=0 To 11
  451.       DK[GUNGIVE(A,B)]
  452.    Next 
  453. Next 
  454.  
  455. Print MP-Start(15);" Alien Animation Data"
  456.  
  457. For A=0 To ALMAX
  458.    For B=0 To 10
  459.       For C=0 To 19
  460.          For D=0 To 10
  461.             PK[ALANIM(A,B,C,D)]
  462. Next : Next : Next : Next 
  463.  
  464. Print MP-Start(15);" Vector gfx filenames"
  465.  
  466. For A=0 To 29
  467.    For B=1 To 64
  468.       If B<=Len(VECGFX$(A)) Then PK[Asc(Mid$(VECGFX$(A),B,1))] Else PK[0]
  469.    Next 
  470. Next 
  471.  
  472. Print MP-Start(15);" Wall gfx filenames"
  473.  
  474. For A=0 To 15
  475.    For B=1 To 64
  476.       If B<=Len(WALLGFX$(A)) Then PK[Asc(Mid$(WALLGFX$(A),B,1))] Else PK[0]
  477.    Next 
  478. Next 
  479.  
  480. Print MP-Start(15);" Wall heights"
  481.  
  482. For A=0 To 15
  483.    DK[WALLHEIGHT(A)]
  484. Next 
  485.  
  486. Print MP-Start(15);"Alien Torch brightnesses"
  487.  
  488. For A=0 To 19
  489.    DK[ALBRIGHT(A)]
  490. Next 
  491.  
  492. For A=0 To 9
  493.    DK[GUNOBJ(A)]
  494. Next 
  495.  
  496. DK[PLR1ALIEN]
  497. DK[PLR2ALIEN]
  498.  
  499. Print MP-Start(15);"Floor data"
  500.  
  501. For A=0 To 15
  502.    DK[FLOORHURT(A)]
  503.    DK[FLOORNOISE(A)]
  504. Next 
  505.  
  506. For A=0 To 19
  507.    LK[ALSHOTYOFF(A)]
  508.    LK[ALSHOTXOFF(A)]
  509. Next 
  510.  
  511. For A=0 To 15
  512.    DK[BACKSFX(A)]
  513. Next 
  514.  
  515. For A=0 To 15
  516.    For B=1 To 64
  517.       If B<=Len(LEVMUSIC$(A)) Then PK[Asc(Mid$(LEVMUSIC$(A),B,1))] Else PK[0]
  518.    Next 
  519. Next 
  520.  
  521. For A=0 To 59
  522. PK[ECHO(A)]
  523. 'PK[A] 
  524. Next 
  525.  
  526. Print MP-Start(15);" Length Of File"
  527.  
  528. F$=Fsel$("","","Select a file to create/overwrite. (.LNK will be added)")
  529.  
  530. If F$<>""
  531.    F$=Upper$(F$)
  532.    If Right$(F$,4)<>".LNK"
  533.       F$=F$+".LNK"
  534.    End If 
  535.    
  536.    A$="Y"
  537.    
  538.    Cls 0 : Locate 0,10
  539.    
  540.    If Exist(F$)
  541.       Pen RED : Paper 0 : Print "FILE ALREADY EXISTS, OVERWRITE?"
  542.       Input A$
  543.       A$=Upper$(Left$(A$,1))
  544.    End If 
  545.    If A$="Y"
  546.       Bsave F$,Start(15) To MP
  547.       Pen GREEN : Paper 0 : Centre "** File saved successfully **"
  548.    Else 
  549.       Pen RED : Paper 0 : Centre "*** File NOT saved ***"
  550.    End If 
  551. End If 
  552.  
  553. Return 
  554.  
  555. LINKFILELOAD:
  556.  
  557. MP=Start(15)
  558.  
  559. F$=Fsel$("","","Select a file to load")
  560.  
  561. If Right$(F$,4)<>".lnk" Then F$=F$+".lnk"
  562.  
  563. Bload F$,Start(15)
  564.  
  565. MP=Start(15)
  566.  
  567. ' 0-63=Path of level directory 
  568. LEVELDIR$=""
  569. For A=1 To 64
  570.    C=Peek(MP) : Add MP,1
  571.    If C<>0 Then LEVELDIR$=LEVELDIR$+Chr$(C)
  572. Next 
  573.  
  574. Print MP-Start(15);" Level Names"
  575.  
  576. For A=0 To 15
  577.    LEVNAME$(A)=""
  578.    For B=1 To 40
  579.       LEVNAME$(A)=LEVNAME$(A)+Chr$(Peek(MP)) : Add MP,1
  580.    Next 
  581. Next 
  582.  
  583. Print MP-Start(15);" Object gfx filenames"
  584.  
  585. For A=0 To 29
  586.    OBJGFX$(A)=""
  587.    For B=1 To 64
  588.       C=Peek(MP) : Add MP,1
  589.       If C<>0 Then OBJGFX$(A)=OBJGFX$(A)+Chr$(C)
  590.    Next 
  591. Next 
  592.  
  593.  
  594. Print MP-Start(15);" SFX filenames"
  595.  
  596. For A=0 To 59
  597.    SFX$(A)=""
  598.    For B=1 To 64
  599.       C=Peek(MP) : Add MP,1
  600.       If C<>0 Then SFX$(A)=SFX$(A)+Chr$(C)
  601.    Next 
  602. Next 
  603.  
  604.  
  605. SFX$(59)="* RESERVED FOR FOOTSTEP SOUNDS *"
  606.  
  607. Print MP-Start(15);" floor tile filename"
  608.  
  609. FTMNAME$=""
  610. For A=1 To 64
  611.    C=Peek(MP) : Add MP,1
  612.    If C<>0 Then FTMNAME$=FTMNAME$+Chr$(C)
  613. Next 
  614.  
  615. TEXNAME$=""
  616. For A=1 To 64
  617.    C=Peek(MP) : Add MP,1
  618.    If C<>0 Then TEXNAME$=TEXNAME$+Chr$(C)
  619. Next 
  620.  
  621. Print MP-Start(15)
  622.  
  623. Add MP,64*2
  624.  
  625. Print MP-Start(15);" gun filename"
  626.  
  627. GGNAME$=""
  628. For A=1 To 64
  629.    C=Peek(MP) : Add MP,1
  630.    If C<>0 Then GGNAME$=GGNAME$+Chr$(C)
  631. Next 
  632.  
  633. Print MP-Start(15);" blurb filename"
  634.  
  635. BLURB$=""
  636. For A=1 To 64
  637.    C=Peek(MP) : Add MP,1
  638.    If C<>0 Then BLURB$=BLURB$+Chr$(C)
  639. Next 
  640.  
  641. Print MP-Start(15);" bullet animation data"
  642.  
  643. For A=0 To 19
  644.    VOI(A)=Leek(MP) : Add MP,4
  645.    BGV(A)=Leek(MP) : Add MP,4
  646.    BLT(A)=Leek(MP) : Add MP,4
  647.    AIC(A)=Leek(MP) : Add MP,4
  648.    BOW(A)=Leek(MP) : Add MP,4
  649.    BOFC(A)=Leek(MP) : Add MP,4
  650.    BDV(A)=Leek(MP) : Add MP,4
  651.    BEF(A)=Leek(MP) : Add MP,4
  652.    BMS(A)=Leek(MP) : Add MP,4
  653.    BULF(A,0)=Leek(MP) : Add MP,4
  654.    BULF(A,1)=Leek(MP) : Add MP,4
  655.    BSFX(A)=Leek(MP) : Add MP,4
  656.    ISFX(A)=Leek(MP) : Add MP,4
  657.    BGT(A)=Leek(MP) : Add MP,4
  658.    IGT(A)=Leek(MP) : Add MP,4
  659.    For G=0 To 1
  660.       For B=0 To 19
  661.          For C=0 To 5
  662.             BULANIM(A,G,B,C)=Peek(MP) : Add MP,1
  663.          Next 
  664.       Next 
  665.    Next 
  666. Next 
  667.  
  668. Print MP-Start(15);" Bullet Names"
  669.  
  670.  
  671. For A=0 To 19
  672.    BULNAME$(A)=""
  673.    For B=1 To 20
  674.       C=Peek(MP) : Add MP,1
  675.       If C<>0
  676.          BULNAME$(A)=BULNAME$(A)+Chr$(C)
  677.       End If 
  678.    Next 
  679. Next 
  680.  
  681. Print MP-Start(15);" Gun names"
  682.  
  683. For A=0 To 9
  684.    GUNNAME$(A)=""
  685.    For B=1 To 20
  686.       C=Peek(MP) : Add MP,1
  687.       If C<>0
  688.          GUNNAME$(A)=GUNNAME$(A)+Chr$(C)
  689.       End If 
  690.    Next 
  691. Next 
  692.  
  693. Print MP-Start(15);" Bullet type used in each gun"
  694.  
  695. For A=0 To 9
  696.    GUNBUL(A)=Deek(MP) : Add MP,2
  697.    DBB(A)=Deek(MP) : Add MP,2
  698.    NOB(A)=Deek(MP) : Add MP,2
  699.    GSFX(A)=Deek(MP) : Add MP,2
  700. Next 
  701.  
  702. Print MP-Start(15);" Names for each alien"
  703.  
  704. For A=0 To ALMAX
  705.    ALNAME$(A)=""
  706.    For B=1 To 20
  707.       C=Peek(MP) : Add MP,1
  708.       If C<>0
  709.          ALNAME$(A)=ALNAME$(A)+Chr$(C)
  710.       End If 
  711.    Next 
  712. Next 
  713.  
  714. Print MP-Start(15);" Stats for each alien type"
  715.  
  716. For A=0 To ALMAX
  717.    For B=0 To 20
  718.       ALSTAT(A,B)=Deek(MP) : Add MP,2
  719.       If ALSTAT(A,B)>32767 Then Add ALSTAT(A,B),-65536
  720.    Next 
  721.    
  722. Next 
  723.  
  724. Print MP-Start(15);" Data for graphics frames"
  725.  
  726. For A=0 To 29
  727.    For B=0 To 31
  728.       OGFRAMES(A,B,0)=Deek(MP) : Add MP,2
  729.       OGFRAMES(A,B,1)=Deek(MP) : Add MP,2
  730.       OGFRAMES(A,B,2)=Deek(MP)*2 : Add MP,2
  731.       OGFRAMES(A,B,3)=Deek(MP)*2 : Add MP,2
  732.    Next 
  733. Next 
  734.  
  735. Print MP-Start(15);" Names for each object type"
  736.  
  737. For A=0 To 29
  738.    OBNAME$(A)=""
  739.    For B=1 To 20
  740.       C=Peek(MP) : Add MP,1
  741.       If C<>0
  742.          OBNAME$(A)=OBNAME$(A)+Chr$(C)
  743.       End If 
  744.    Next 
  745. Next 
  746.  
  747. Print MP-Start(15);" Object Statistics"
  748.  
  749. For A=0 To 29
  750.    For B=0 To 19
  751.       O=Deek(MP) : Add MP,2
  752.       If O>32767 Then O=O-65536
  753.       OBSTAT(A,B)=O
  754.    Next 
  755. Next 
  756.  
  757. Print MP-Start(15);" Object default anim data"
  758.  
  759. For A=0 To 29
  760.    For B=0 To 19
  761.       For C=0 To 5
  762.          O=Peek(MP)
  763.          If O>127 and C=4 Then O=O-256
  764.          OBDEFAF(A,B,C)=O : Add MP,1
  765.       Next 
  766.    Next 
  767. Next 
  768.  
  769. Print MP-Start(15);" Object activated anim data"
  770.  
  771. For A=0 To 29
  772.    For B=0 To 19
  773.       For C=0 To 5
  774.          O=Peek(MP)
  775.          If O>127 and C=4 Then O=O-256
  776.          OBACTAF(A,B,C)=O : Add MP,1
  777.       Next 
  778.    Next 
  779. Next 
  780.  
  781. Print MP-Start(15);" Ammo collected from objects"
  782.  
  783. For A=0 To 29
  784.    For B=0 To 21
  785.       AMMOGIVE(A,B)=Deek(MP) : Add MP,2
  786.    Next 
  787. Next 
  788.  
  789. Print MP-Start(15);" Guns collected from objects"
  790.  
  791. For A=0 To 29
  792.    For B=0 To 11
  793.       GUNGIVE(A,B)=Deek(MP) : Add MP,2
  794.    Next 
  795. Next 
  796.  
  797. Print MP-Start(15);" Alien Animation Data"
  798.  
  799. For A=0 To ALMAX
  800.    For B=0 To 10
  801.       For C=0 To 19
  802.          For D=0 To 10
  803.             ALANIM(A,B,C,D)=Peek(MP) : Add MP,1
  804.          Next 
  805.          
  806.          If ALANIM(A,B,C,0)=255 Then ALANIM(A,B,C,0)=-1
  807.          If ALANIM(A,B,C,4)>127 Then Add ALANIM(A,B,C,4),-256
  808.          If ALANIM(A,B,C,1)>127 Then Add ALANIM(A,B,C,1),-256
  809.          If ALANIM(A,B,C,9)>127 Then Add ALANIM(A,B,C,9),-256
  810.          If ALANIM(A,B,C,8)>127 Then Add ALANIM(A,B,C,8),-256
  811.          If ALANIM(A,B,C,10)>127 Then Add ALANIM(A,B,C,10),-256
  812. Next : Next : Next 
  813.  
  814. For A=0 To 29
  815.    VECGFX$(A)=""
  816.    For B=1 To 64
  817.       C=Peek(MP) : Add MP,1
  818.       If C<>0 Then VECGFX$(A)=VECGFX$(A)+Chr$(C)
  819.    Next 
  820. Next 
  821.  
  822. For A=0 To 15
  823.    WALLGFX$(A)=""
  824.    For B=1 To 64
  825.       C=Peek(MP) : Add MP,1
  826.       If C<>0 Then WALLGFX$(A)=WALLGFX$(A)+Chr$(C)
  827.    Next 
  828. Next 
  829.  
  830. For A=0 To 15
  831.    WALLHEIGHT(A)=Deek(MP) : Add MP,2
  832. Next 
  833.  
  834. For A=0 To 19
  835.    ALBRIGHT(A)=Deek(MP) : Add MP,2
  836. Next 
  837.  
  838. For A=0 To 9
  839.    GUNOBJ(A)=Deek(MP) : Add MP,2
  840. Next 
  841.  
  842. PLR1ALIEN=Deek(MP) : Add MP,2
  843. PLR2ALIEN=Deek(MP) : Add MP,2
  844.  
  845. For A=0 To 15
  846.    FLOORHURT(A)=Deek(MP) : Add MP,2
  847.    FLOORNOISE(A)=Deek(MP) : Add MP,2
  848. Next 
  849.  
  850. For A=0 To 19
  851.    ALSHOTYOFF(A)=Leek(MP) : Add MP,4
  852.    ALSHOTXOFF(A)=Leek(MP) : Add MP,4
  853. Next 
  854. For A=0 To 15
  855.    BACKSFX(A)=Deek(MP) : Add MP,2
  856. Next 
  857.  
  858. For A=0 To 15
  859.    LEVMUSIC$(A)=""
  860.    For B=1 To 64
  861.       C=Peek(MP) : Add MP,1
  862.       If C<>0 Then LEVMUSIC$(A)=LEVMUSIC$(A)+Chr$(C)
  863.    Next 
  864. Next 
  865.  
  866. For A=0 To 59
  867. ECHO(A)=Peek(MP) : Add MP,1
  868. Next 
  869.  
  870.  
  871. Pen GREEN : Cls 0
  872. Centre "*** Link File Loaded ***"
  873.  
  874. Return 
  875.  
  876.  
  877. SETFLOORDAMAGE:
  878.  
  879. Menu Off 
  880.  
  881. Repeat 
  882.    Cls 
  883.    Locate 0,0 : Pen GREEN
  884.    Centre "Set damage done by each type of floor:"
  885.    
  886.    For A=0 To 15
  887.       Locate 0,A+2
  888.       Pen WHITE
  889.       Print "   Tile : ";A+1;
  890.       Locate 40,
  891.       Print ":";
  892.       Locate 60,
  893.       Pen GREEN
  894.       Print FLOORHURT(A)
  895.    Next 
  896.    
  897.    Pen RED
  898.    Locate 0,31
  899.    Centre "*** DONE ***"
  900.    
  901.    Repeat : Until Mouse Click
  902.    Y=Y Screen(0,Y Mouse)/8
  903.    
  904.    If Y>1 and Y<(16+2)
  905.       Y=Y-2
  906.       Locate 60,Y+2
  907.       Pen RED
  908.       Input FLOORHURT(Y)
  909.    End If 
  910.    
  911. Until Y=31
  912.  
  913. Cls 
  914. Menu On 
  915.  
  916. Return 
  917.  
  918. SETFLOORSFX:
  919.  
  920. Menu Off 
  921.  
  922. Repeat 
  923.    Cls 
  924.    Locate 0,0 : Pen GREEN
  925.    Centre "Players' footstep noises on each type of floor:"
  926.    
  927.    For A=0 To 15
  928.       Locate 0,A+2
  929.       Pen WHITE
  930.       Print "   Tile : ";A+1;
  931.       Locate 40,
  932.       Print ":";
  933.       Locate 42,
  934.       Pen GREEN
  935.       If FLOORNOISE(A)>0
  936.          Print SFX$(FLOORNOISE(A)-1)
  937.       Else 
  938.          Print "  None."
  939.       End If 
  940.    Next 
  941.    
  942.    Pen RED
  943.    Locate 0,31
  944.    Centre "*** DONE ***"
  945.    
  946.    Repeat : Until Mouse Click
  947.    Y=Y Screen(0,Y Mouse)/8
  948.    
  949.    If Y>1 and Y<(16+2)
  950.       Y=Y-2
  951.       TY=Y
  952.       Gosub SFXNAMESHOW
  953.       Gosub SFXNAMEPICK
  954.       FLOORNOISE(TY)=Y
  955.       
  956.    End If 
  957.    
  958. Until Y=31
  959.  
  960. Cls 
  961. Menu On 
  962.  
  963. Return 
  964.  
  965.  
  966.  
  967. SETPLAYERSTATS:
  968. Menu Off 
  969. Repeat 
  970.    Cls 0
  971.    Locate 0,0 : Pen GREEN
  972.    Centre "Define Player Statistics"
  973.    Locate 0,2
  974.    Pen WHITE
  975.    Print "Player ONE appears as alien      :";
  976.    Locate 40,
  977.    Pen RED
  978.    Print ALNAME$(PLR1ALIEN)
  979.    
  980.    Locate 0,4
  981.    Pen WHITE
  982.    Print "Player TWO appears as alien      :";
  983.    Locate 40,
  984.    Pen RED
  985.    Print ALNAME$(PLR2ALIEN)
  986.    
  987.    Locate 0,31 : Pen RED : Centre "*** DONE ***"
  988.    
  989.    Repeat 
  990.    Until Mouse Click
  991.    Y=Y Screen(0,Y Mouse)/8
  992.    
  993.    If Y=2
  994.       
  995.       Gosub ALIENNAMESHOW
  996.       Locate 0,0 : Print Space$(80)
  997.       Pen WHITE
  998.       Locate 0,0 : Centre "Select Player ONE's appearance:"
  999.       Locate 0,29 : Print Space$(80)
  1000.       Locate 0,31 : Print Space$(70);
  1001.       Locate 0,31 : Pen RED : Centre "* CANCEL *"
  1002.       Repeat 
  1003.       Until Mouse Click
  1004.       Y=Y Screen(0,Y Mouse)/8
  1005.       Y=Y-1
  1006.       If Y>=0 and Y<>30
  1007.          PLR1ALIEN=Y
  1008.       End If 
  1009.       
  1010.       Y=-1
  1011.       
  1012.    Else If Y=4
  1013.       
  1014.       Gosub ALIENNAMESHOW
  1015.       Locate 0,0 : Print Space$(80)
  1016.       Pen WHITE
  1017.       Locate 0,0 : Centre "Select Player TWO's appearance:"
  1018.       Locate 0,29 : Print Space$(80)
  1019.       Locate 0,31 : Print Space$(70);
  1020.       Locate 0,31 : Pen RED : Centre "* CANCEL *"
  1021.       Repeat 
  1022.       Until Mouse Click
  1023.       Y=Y Screen(0,Y Mouse)/8
  1024.       Y=Y-1
  1025.       If Y>=0 and Y<>30
  1026.          PLR2ALIEN=Y
  1027.       End If 
  1028.       
  1029.       Y=-1
  1030.       
  1031.    End If 
  1032.    
  1033. Until Y=31
  1034. Cls 0
  1035. Menu On 
  1036. Return 
  1037.  
  1038.  
  1039. SETGUNBULLETS:
  1040.  
  1041. Menu Off 
  1042.  
  1043. Repeat 
  1044.    Gosub GUNTYPESHOW
  1045.    Locate 0,31
  1046.    Pen RED
  1047.    Centre "*** DONE ***"
  1048.    Repeat 
  1049.    Until Mouse Click
  1050.    Y=Y Screen(0,Y Mouse)
  1051.    Y=Y/8
  1052.    If Y>0 and Y<31
  1053.       Y=Y-1 : YC=Y/3
  1054.       X=X Screen(0,X Mouse)
  1055.       X=X/320
  1056.       If Y mod 3=0
  1057.          If X=0
  1058.             Locate 4,Y+1 : Pen RED : Input "NAME: ";GUNNAME$(YC)
  1059.          Else 
  1060.             Gosub BULDATSHOW
  1061.             Repeat 
  1062.                Repeat 
  1063.                Until Mouse Click
  1064.                F=Y Screen(0,Y Mouse)
  1065.                F=F/8
  1066.             Until F>0 and F<21
  1067.             GUNBUL(YC)=F-1
  1068.          End If 
  1069.       Else 
  1070.          If Y mod 3=1
  1071.             If X=0
  1072.                Locate 4,Y+1 : Pen RED : Input "Bullets fired/shot: ";NOB(YC)
  1073.             Else 
  1074.                Locate 40,Y+1 : Pen RED : Input "Delay between shots: ";DBB(YC)
  1075.             End If 
  1076.          Else 
  1077.             If X=0
  1078.                TY=Y
  1079.                Gosub SFXNAMESHOW
  1080.                Gosub SFXNAMEPICK
  1081.                GSFX(YC)=Y-1
  1082.                Y=TY
  1083.             Else 
  1084.                Gosub OBJNAMESHOW
  1085.                Repeat 
  1086.                Until Mouse Click
  1087.                F=Y Screen(0,Y Mouse)
  1088.                F=F/8
  1089.                GUNOBJ(YC)=F-1
  1090.             End If 
  1091.          End If 
  1092.       End If 
  1093.    End If 
  1094.    
  1095. Until Y=31
  1096.  
  1097. Cls 0
  1098. Menu On 
  1099. Return 
  1100.  
  1101. GUNTYPESHOW:
  1102. Cls 0
  1103. Locate 0,0
  1104. Pen GREEN : Paper 0
  1105. Centre "Player Gun Names / Bullets:"
  1106.  
  1107. For A=0 To 9
  1108.    Locate 0,A*3+1
  1109.    Pen RED
  1110.    Print A; : Locate 4,
  1111.    Pen WHITE
  1112.    Print GUNNAME$(A);
  1113.    Locate 40,
  1114.    Pen GREEN : Print ":";
  1115.    Locate 50,
  1116.    Pen RED
  1117.    Print BULNAME$(GUNBUL(A))
  1118.    Pen WHITE
  1119.    Print "    Bullets fired/shot : ";
  1120.    Pen RED
  1121.    Print NOB(A);
  1122.    Locate 40,
  1123.    Pen WHITE
  1124.    Print "Delay Between Shots (50=1sec): ";
  1125.    Pen RED
  1126.    Print DBB(A)
  1127.    Locate 4,
  1128.    Pen WHITE
  1129.    Print "Gun SFX: ";
  1130.    Pen RED
  1131.    If GSFX(A)>=0
  1132.       Print SFX$(GSFX(A));
  1133.    Else 
  1134.       Print "None.";
  1135.    End If 
  1136.    Locate 40,
  1137.    Pen WHITE
  1138.    Print "On Screen Object: ";
  1139.    Pen RED
  1140.    Print OBNAME$(GUNOBJ(A));
  1141.    
  1142. Next 
  1143.  
  1144. Return 
  1145.  
  1146. ROSCRN:
  1147.  
  1148. Cls 0
  1149.  
  1150. Locate 0,10
  1151. Pen RED : Paper 0
  1152. Centre "ALIEN BREED 3D"
  1153. Pen WHITE
  1154. Locate 0,12
  1155. Centre "Game Linker"
  1156. Locate 0,14
  1157. Centre "RMB to access menus.."
  1158. Locate 0,16
  1159. Centre "Program by A. Clitheroe"
  1160. Locate 0,18
  1161. Centre " "
  1162. Return 
  1163.  
  1164. SETBULLETDATA:
  1165. Menu Off 
  1166. Gosub BULDATSHOW
  1167.  
  1168. Gosub STATCLICKSHOW
  1169.  
  1170. Repeat 
  1171.    Repeat 
  1172.    Until Mouse Click
  1173.    Y=Y Screen(0,Y Mouse)
  1174.    Y=Y/8
  1175.    If Y<31 and Y>0
  1176.       X=X Screen(0,X Mouse)
  1177.       X=X/8
  1178.       If X>48
  1179.          
  1180.          BULNUM=Y-1
  1181.          Gosub CHANGEBULLETSTATS
  1182.          Gosub BULDATSHOW
  1183.          Gosub STATCLICKSHOW
  1184.          Y=0
  1185.       Else 
  1186.          Pen GREEN
  1187.          Locate 15,Y
  1188.          Input BULNAME$(Y-1)
  1189.          Gosub BULDATSHOW
  1190.          Gosub STATCLICKSHOW
  1191.          Y=0
  1192.       End If 
  1193.    End If 
  1194. Until Y=31
  1195. Menu On 
  1196. Cls 0
  1197. Return 
  1198.  
  1199. STATCLICKSHOW:
  1200. Pen RED : Paper 0
  1201. For A=0 To 19
  1202.    Locate 47,A+1
  1203.    Print " | Edit Bullet Statistics"
  1204. Next 
  1205.  
  1206. Locate 0,31 : Pen RED : Centre "*** DONE ***"
  1207. Return 
  1208.  
  1209. CHANGEBULLETSTATS:
  1210.  
  1211. Gosub BULSTATSHOW
  1212.  
  1213. Repeat 
  1214.    Pen RED : Paper 0
  1215.    Locate 0,31
  1216.    Centre "*** DONE ***"
  1217.    Repeat 
  1218.    Until Mouse Click
  1219.    Y=Y Screen(0,Y Mouse)
  1220.    Y=Y/8
  1221.    
  1222.    
  1223.    If Y=3
  1224.       Pen GREEN : Paper 0
  1225.       Locate 60,3
  1226.       Input BDV(BULNUM)
  1227.       Gosub BULSTATSHOW
  1228.    End If 
  1229.    
  1230.    
  1231.    If Y=5
  1232.       VOI(BULNUM)=1-VOI(BULNUM)
  1233.       Gosub BULSTATSHOW
  1234.    End If 
  1235.    
  1236.    If VOI(BULNUM)=0
  1237.       If Y=6
  1238.          Pen GREEN : Paper 0
  1239.          Locate 60,6
  1240.          Input BGV(BULNUM)
  1241.          Gosub BULSTATSHOW
  1242.       End If 
  1243.       If Y=7
  1244.          Pen GREEN : Paper 0
  1245.          Locate 60,7
  1246.          BOW(BULNUM)=1-BOW(BULNUM)
  1247.          Gosub BULSTATSHOW
  1248.       End If 
  1249.       If Y=8
  1250.          Pen GREEN : Paper 0
  1251.          Locate 60,8
  1252.          BOFC(BULNUM)=1-BOFC(BULNUM)
  1253.          Gosub BULSTATSHOW
  1254.       End If 
  1255.       If Y=9
  1256.          OY=Y
  1257.          Gosub SFXNAMESHOW
  1258.          Gosub SFXNAMEPICK
  1259.          BSFX(BULNUM)=Y
  1260.          Y=OY
  1261.          Gosub BULSTATSHOW
  1262.       End If 
  1263.       
  1264.       If Y=10
  1265.          Pen GREEN : Paper 0
  1266.          Locate 60,10
  1267.          Input BLT(BULNUM)
  1268.          Gosub BULSTATSHOW
  1269.       End If 
  1270.       If Y=11
  1271.          Pen GREEN : Paper 0
  1272.          Locate 60,11
  1273.          Input BEF(BULNUM)
  1274.          Gosub BULSTATSHOW
  1275.       End If 
  1276.       If Y=12
  1277.          Pen GREEN : Paper 0
  1278.          Locate 60,12
  1279.          Input BMS(BULNUM)
  1280.          BMS(BULNUM)=Min(7,Max(BMS(BULNUM),0))
  1281.          Gosub BULSTATSHOW
  1282.       End If 
  1283.       If Y=13
  1284.          OY=Y
  1285.          Gosub SFXNAMESHOW
  1286.          Gosub SFXNAMEPICK
  1287.          ISFX(BULNUM)=Y
  1288.          Y=OY
  1289.          Gosub BULSTATSHOW
  1290.       End If 
  1291.       If Y=14
  1292.          PON=0
  1293.          Gosub DEFBULANIM
  1294.          Gosub BULSTATSHOW
  1295.       End If 
  1296.       If Y=16
  1297.          BGT(BULNUM)=(BGT(BULNUM)+1) mod 3
  1298.          Gosub BULSTATSHOW
  1299.       End If 
  1300.    End If 
  1301.    
  1302.    If Y=15
  1303.       PON=1
  1304.       Gosub DEFBULANIM
  1305.       Gosub BULSTATSHOW
  1306.    End If 
  1307.    If Y=17
  1308.       IGT(BULNUM)=(IGT(BULNUM)+1) mod 3
  1309.       Gosub BULSTATSHOW
  1310.    End If 
  1311.    
  1312. Until Y=31
  1313.  
  1314. Cls 0
  1315.  
  1316. Return 
  1317.  
  1318.  
  1319. DEFBULANIM:
  1320.  
  1321. Repeat 
  1322.    Gosub BULANIMSHOW
  1323.    Repeat 
  1324.       MC=Mouse Click
  1325.    Until MC<>0
  1326.    X=X Screen(0,X Mouse)/8
  1327.    Y=Y Screen(0,Y Mouse)/8
  1328.    
  1329.    If Y=31
  1330.       If X<15
  1331.          BULF(BULNUM,PON)=Min(BULF(BULNUM,PON)+1,19)
  1332.          For J=0 To 4
  1333.             BULANIM(BULNUM,PON,BULF(BULNUM,PON),J)=BULANIM(BULNUM,PON,BULF(BULNUM,PON)-1,J)
  1334.          Next 
  1335.       Else 
  1336.          If X<30
  1337.             BULF(BULNUM,PON)=Max(BULF(BULNUM,PON)-1,0)
  1338.          End If 
  1339.       End If 
  1340.    End If 
  1341.    
  1342.    Z=(Y-1)+(X/40)*30
  1343.    DX=X mod 40
  1344.    
  1345.    '   If Y=0 
  1346.    '      If X>40 and X<60
  1347.    '         Pen GREEN
  1348.    '         Locate 0,31 : Input "FRAME WIDTH :";BFW(BULNUM); 
  1349.    '      End If  
  1350.    '      If X>60 
  1351.    '         Pen GREEN
  1352.    '         Locate 0,31 : Input "FRAME HEIGHT :";BFH(BULNUM);
  1353.    '      End If  
  1354.    '   End If 
  1355.    
  1356.    If Y>0 and Y<31
  1357.       If DX>3 and DX<7
  1358.          Gosub PICKOBJGRAPHNAME
  1359.          BULANIM(BULNUM,PON,Z,0)=Y-1
  1360.       End If 
  1361.       If DX>9 and DX<13
  1362.          If MC=2
  1363.             FRAMEPICK[BULANIM(BULNUM,PON,Z,0),BULANIM(BULNUM,PON,Z,1)+1]
  1364.             BULANIM(BULNUM,PON,Z,1)=Param-1
  1365.             Gosub BULANIMSHOW
  1366.          Else 
  1367.             Pen GREEN
  1368.             Locate 0,31 : Input "FRAME NUMBER :";L : BULANIM(BULNUM,PON,Z,1)=L-1
  1369.          End If 
  1370.       End If 
  1371.       If DX>15 and DX<20
  1372.          Pen GREEN
  1373.          Locate 0,31 : Input "SCALED WIDTH :";BULANIM(BULNUM,PON,Z,2);
  1374.       End If 
  1375.       If DX>22 and DX<27
  1376.          Pen GREEN
  1377.          Locate 0,31 : Input "SCALED HEIGHT :";BULANIM(BULNUM,PON,Z,3);
  1378.       End If 
  1379.       If DX>29 and DX<34
  1380.          Pen GREEN
  1381.          Locate 0,31 : Input "VERTICAL OFFSET:";BULANIM(BULNUM,PON,Z,4);
  1382.       End If 
  1383.       If DX>36 and DX<40
  1384.          Pen GREEN
  1385.          Locate 0,31 : Input "BRIGHTNESS VALUE:";BULANIM(BULNUM,PON,Z,5);
  1386.       End If 
  1387.    End If 
  1388.    
  1389. Until Y=31 and X>60
  1390.  
  1391. Y=0
  1392.  
  1393. Return 
  1394.  
  1395. Procedure FRAMEPICK[OG,SV]
  1396.    FRN=Abs(SV)
  1397.    If SV<0 Then FLIP=1 Else FLIP=0
  1398.    If Exist(OBJGFX$(OG)+".dat")
  1399.       Screen Open 1,320,128,32,Lowres
  1400.       Screen Display 1,,42,,
  1401.       Screen Display 0,,130+42,,
  1402.       Screen 1
  1403.       Curs Off : Flash Off : Cls 0
  1404.       Bload OBJGFX$(OG)+".256pal",Start(15)
  1405.       
  1406.       Bload "ab3:includes/256pal",Start(15)+1024
  1407.       For A=0 To 31 : 
  1408.          C=Peek(Start(15)+A*2)
  1409.          R=Deek(Start(15)+1024+C*6)
  1410.          G=Deek(Start(15)+1026+C*6)
  1411.          B=Deek(Start(15)+1028+C*6)
  1412.          Colour A,(R/16)*$100+(G/16)*$10+(B/16)
  1413.       Next 
  1414.       
  1415.       
  1416.       Bload OBJGFX$(OG)+".dat",Start(15)
  1417.       WOF=Deek(Start(15)+2)
  1418.       HOF=Deek(Start(15)+4)
  1419.       Screen 0 : Cls 0
  1420.       Locate 0,0 : Pen GREEN : Centre "[ Prev Frame ][ Next Frame ]"
  1421.       Locate 0,2 : Pen GREEN : Centre "[ Flip Horizontally ]"
  1422.       Locate 0,15 : Pen RED : Centre "*** DONE ***"
  1423.       Locate 0,4 : Pen GREEN : Centre "Current Frame: "+Str$(FRN)
  1424.       Repeat 
  1425.          Screen 1 : Cls 0
  1426.          LX=OGFRAMES(OG,FRN-1,0)
  1427.          LY=OGFRAMES(OG,FRN-1,1)
  1428.          LW=OGFRAMES(OG,FRN-1,2)
  1429.          LH=OGFRAMES(OG,FRN-1,3)
  1430.          S=Start(15)+LX*HOF+6+LY
  1431.          If FLIP=0
  1432.             For A=0 To LW-1
  1433.                For B=0 To LH-1
  1434.                    Extension_12_036E A,B,Peek(S+B+(A*HOF))
  1435.                Next 
  1436.             Next 
  1437.          Else 
  1438.             For A=0 To LW-1
  1439.                For B=0 To LH-1
  1440.                    Extension_12_036E LW-A,B,Peek(S+B+(A*HOF))
  1441.                Next 
  1442.             Next 
  1443.          End If 
  1444.          Repeat : Until Mouse Click
  1445.          LY=Y Screen(0,Y Mouse)
  1446.          LX=X Screen(0,X Mouse)
  1447.          LY=LY/8 : LX=LX/8
  1448.          If LY=0
  1449.             If LX<40
  1450.                FRN=Max(FRN-1,1)
  1451.             Else 
  1452.                FRN=Min(FRN+1,64)
  1453.             End If 
  1454.             Screen 0
  1455.             Locate 0,4 : Pen GREEN : Centre "    Current Frame: "+Str$(FRN)+"    "
  1456.          End If 
  1457.          If LY=2
  1458.             FLIP=1-FLIP
  1459.          End If 
  1460.          
  1461.       Until LY=15
  1462.       Screen Close 1
  1463.       Screen Display 0,,42,,
  1464.    End If 
  1465.    If FLIP=1
  1466.       FRN=-FRN
  1467.    End If 
  1468. End Proc[FRN]
  1469.  
  1470. BULANIMSHOW:
  1471. Cls 0
  1472. Pen GREEN : Paper 0
  1473. Locate 0,0
  1474. If PON=0
  1475.    A$="Animation frames for "+BULNAME$(BULNUM)
  1476. Else 
  1477.    A$="Impact frames for "+BULNAME$(BULNUM)
  1478. End If 
  1479. Centre A$
  1480. 'Locate 40,0 
  1481. 'Pen WHITE 
  1482. 'Print "Frame Width:"
  1483. 'Locate 53,0 
  1484. 'Pen RED 
  1485. 'Print Using "###";BFW(BULNUM) 
  1486. 'Locate 60,0 
  1487. 'Pen WHITE 
  1488. 'Print "Frame Height:" 
  1489. 'Locate 74,0 
  1490. 'Pen RED 
  1491. 'Print Using "###";BFH(BULNUM) 
  1492.  
  1493. For A=0 To BULF(BULNUM,PON)
  1494.    B=(A mod 30)+1
  1495.    C=(A/30)*40
  1496.    Locate C,B
  1497.    Pen WHITE
  1498.    Print "GF:";
  1499.    Pen RED
  1500.    Print Using "## ";BULANIM(BULNUM,PON,A,0)+1;
  1501.    Pen WHITE
  1502.    Print "FN:";
  1503.    Pen RED
  1504.    Print Using "## ";BULANIM(BULNUM,PON,A,1)+1;
  1505.    Pen WHITE
  1506.    Print "SW:";
  1507.    Pen RED
  1508.    Print Using "### ";BULANIM(BULNUM,PON,A,2);
  1509.    Pen WHITE
  1510.    Print "SH:";
  1511.    Pen RED
  1512.    Print Using "### ";BULANIM(BULNUM,PON,A,3);
  1513.    Pen WHITE
  1514.    Print "VO:";
  1515.    Pen RED
  1516.    Print Using "+## ";BULANIM(BULNUM,PON,A,4);
  1517.    Pen WHITE
  1518.    Print "BV:";
  1519.    Pen RED
  1520.    Print Using "## ";BULANIM(BULNUM,PON,A,5);
  1521.    Print 
  1522. Next 
  1523.  
  1524. Locate 0,31
  1525. Pen GREEN
  1526. Print " * ADD FRAME *  * DEL FRAME * ";
  1527. Locate 60,31
  1528. Pen RED
  1529. Print "*** DONE ***";
  1530.  
  1531. Return 
  1532.  
  1533. BULSTATSHOW:
  1534.  
  1535. Cls 0
  1536. Locate 0,0
  1537. Pen GREEN : Paper 0
  1538. A$="Bullet Statistics for: "+BULNAME$(BULNUM)
  1539. Centre A$
  1540.  
  1541. Locate 0,3
  1542. Pen WHITE
  1543. Print "Damage to target per bullet              :-";
  1544. Pen RED
  1545. Locate 60,
  1546. Print BDV(BULNUM)
  1547.  
  1548. Locate 0,5
  1549. Pen WHITE
  1550. Print "Visible bullet or instant effect (V/I)   :-";
  1551. Pen RED
  1552. Locate 60,
  1553. If VOI(BULNUM)=0
  1554.    Print "VISIBLE"
  1555.    Pen WHITE
  1556.    Print "Gravity value                            :-";
  1557.    Locate 60,
  1558.    Pen RED
  1559.    Print BGV(BULNUM)
  1560.    Pen WHITE
  1561.    Print "Bounce off walls (Y/N)                   :-";
  1562.    Pen RED
  1563.    Locate 60,
  1564.    If BOW(BULNUM)=1
  1565.       Print "YES"
  1566.    Else 
  1567.       Print "NO"
  1568.    End If 
  1569.    Pen WHITE
  1570.    Print "Bounce off floors/ceilings (Y/N)         :-";
  1571.    Pen RED
  1572.    Locate 60,
  1573.    If BOFC(BULNUM)=1
  1574.       Print "YES"
  1575.    Else 
  1576.       Print "NO"
  1577.    End If 
  1578.    
  1579.    If BOFC(BULNUM)=1
  1580.       Pen WHITE
  1581.       Print "Bounce Noise                             :-";
  1582.       Pen RED
  1583.       If BSFX(BULNUM)>0
  1584.          Print SFX$(BSFX(BULNUM)-1)
  1585.       Else 
  1586.          Locate 60, : Print "None"
  1587.       End If 
  1588.    Else 
  1589.       Print 
  1590.    End If 
  1591.    
  1592.    Pen WHITE
  1593.    Print "Bullet lifetime (-1 = infinite)          :-";
  1594.    Pen RED
  1595.    Locate 60,
  1596.    If BLT(BULNUM)=-1
  1597.       Print "INFINITE"
  1598.    Else 
  1599.       Print BLT(BULNUM)
  1600.    End If 
  1601.    
  1602.    Pen WHITE
  1603.    Print "Explosive force                          :-";
  1604.    Pen RED
  1605.    Locate 60,
  1606.    Print BEF(BULNUM)
  1607.    
  1608.    Pen WHITE
  1609.    Print "Movement speed (0-5)                     :-";
  1610.    Pen RED
  1611.    Locate 60,
  1612.    Print BMS(BULNUM)
  1613.    
  1614.    Pen WHITE
  1615.    Print "Impact Noise                             :-";
  1616.    Pen RED
  1617.    If ISFX(BULNUM)>0
  1618.       Print SFX$(ISFX(BULNUM)-1)
  1619.    Else 
  1620.       Locate 60, : Print "None"
  1621.    End If 
  1622.    
  1623.    Pen RED
  1624.    Centre "[ DEFINE BULLET ANIMATION ]"
  1625.    Print 
  1626.    Pen RED
  1627.    Centre "[ DEFINE IMPACT ANIMATION ]"
  1628.    Locate 0,16 : Pen WHITE
  1629.    Print "Bullet Graphic Type                      :-";
  1630.    Pen RED
  1631.    If BGT(BULNUM)=0
  1632.       Print " Bitmap"
  1633.    Else If BGT(BULNUM)=1
  1634.       Print " Glare"
  1635.    Else 
  1636.       Print " Additive Transparency"
  1637.    End If 
  1638.    
  1639.    Locate 0,17 : Pen WHITE
  1640.    Print "Impact Graphic Type                      :-";
  1641.    Pen RED
  1642.    If IGT(BULNUM)=0
  1643.       Print " Bitmap"
  1644.    Else If IGT(BULNUM)=1
  1645.       Print " Glare"
  1646.    Else 
  1647.       Print " Additive Transparency"
  1648.    End If 
  1649.    
  1650. Else 
  1651.    Print "INSTANT"
  1652.    Print "        "
  1653.    Locate 0,15 : Pen RED : Centre "[ DEFINE IMPACT ANIMATION ]"
  1654.    Locate 0,17 : Pen WHITE
  1655.    Print "Impact Graphic Type                      :-";
  1656.    Pen RED
  1657.    If IGT(BULNUM)=0
  1658.       Print " Bitmap"
  1659.    Else If IGT(BULNUM)=1
  1660.       Print " Glare"
  1661.    Else 
  1662.       Print " Additive Transparency"
  1663.    End If 
  1664. End If 
  1665.  
  1666. Return 
  1667.  
  1668. BULDATSHOW:
  1669. Cls 0
  1670. Locate 0,0
  1671. Pen GREEN : Paper 0
  1672. Centre "Bullet Type List"
  1673. For A=0 To 19
  1674.    Locate 5,A+1
  1675.    Pen WHITE : Paper 0
  1676.    Print A; : Locate 9, : Pen GREEN : Print "NAME:"; : Pen WHITE : Locate 15, : Print BULNAME$(A)
  1677. Next 
  1678.  
  1679. Return 
  1680.  
  1681.  
  1682. SETBACKSFX:
  1683. Menu Off 
  1684.  
  1685. Repeat 
  1686.    Cls 0 : Locate 0,0
  1687.    Pen GREEN
  1688.    Centre "Select a number from 0-15 to choose background effects"
  1689.    
  1690.    For A=0 To 15
  1691.       Locate 0,A+2
  1692.       Pen WHITE
  1693.       Print A;
  1694.       Locate 4,
  1695.       Pen GREEN
  1696.       Print SFX$(BACKSFX(A))
  1697.    Next 
  1698.    
  1699.    Pen RED
  1700.    Locate 0,31
  1701.    Centre "*** DONE ***"
  1702.    
  1703.    Repeat 
  1704.    Until Mouse Click<>0
  1705.    Y=Y Screen(0,Y Mouse)/8
  1706.    If Y<>31
  1707.       
  1708.       OOY=(Y-2)
  1709.       Gosub SFXNAMESHOW
  1710.       Gosub SFXNAMEPICK
  1711.       If Y<>100
  1712.          
  1713.          BACKSFX(OOY)=Y-1
  1714.       End If 
  1715.       
  1716.       Y=1000
  1717.       
  1718.    End If 
  1719.    
  1720. Until Y=31
  1721.  
  1722. Cls 0
  1723.  
  1724. Menu On 
  1725. Return 
  1726.  
  1727. SETECHOSFX:
  1728. Menu Off 
  1729.  
  1730. Repeat 
  1731.    Gosub SFXNAMESHOW
  1732.    Locate 0,0 : Print Space$(80)
  1733.    Locate 0,0
  1734.    Pen GREEN
  1735.    Centre "Select a Sound Effect :-"
  1736.    
  1737.    For A=0 To 59
  1738.       Y=(A mod 30)+1
  1739.       X=(A/30)*40
  1740.       Locate X+36,Y : Pen RED
  1741.       Print ECHO(A)+1;
  1742.    Next 
  1743.    
  1744.    Pen RED
  1745.    Locate 0,31
  1746.    Centre "*** DONE ***"
  1747.    
  1748.    Gosub SFXNAMEPICK
  1749.    
  1750.    If Y<>100
  1751.       
  1752.       OOY=Y-1
  1753.       Gosub SFXNAMESHOW
  1754.       Locate 0,0 : Print Space$(80)
  1755.       Locate 0,0
  1756.       Pen RED
  1757.       Centre "Select an echoed version of the sound :-"
  1758.       Gosub SFXNAMEPICK
  1759.       If Y<>100
  1760.          ECHO(OOY)=Y-1
  1761.       End If 
  1762.       
  1763.       Y=1000
  1764.       
  1765.    End If 
  1766.    
  1767. Until Y=100
  1768.  
  1769. Cls 0
  1770.  
  1771. Menu On 
  1772. Return 
  1773.  
  1774.  
  1775. PICKLEVELMUSIC:
  1776. Menu Off 
  1777.  
  1778. Repeat 
  1779.    Cls 0 : Locate 0,0
  1780.    Pen GREEN
  1781.    Centre "Select a number from 0-15 to choose level music files"
  1782.    
  1783.    For A=0 To 15
  1784.       Locate 0,A+2
  1785.       Pen WHITE
  1786.       Print A;
  1787.       Locate 4,
  1788.       Pen GREEN
  1789.       Print LEVMUSIC$(A)
  1790.    Next 
  1791.    
  1792.    Pen RED
  1793.    Locate 0,31
  1794.    Centre "*** DONE ***"
  1795.    
  1796.    Repeat 
  1797.    Until Mouse Click<>0
  1798.    Y=Y Screen(0,Y Mouse)/8
  1799.    If Y<>31
  1800.       Y=Y-2
  1801.       If Y>=0 and Y<16
  1802.          
  1803.          F$=Fsel$("","","Pick a PACKED music file")
  1804.          
  1805.          LEVMUSIC$(Y)=F$
  1806.          
  1807.       End If 
  1808.    End If 
  1809.    
  1810. Until Y=31
  1811.  
  1812. Cls 0
  1813.  
  1814. Menu On 
  1815. Return 
  1816.  
  1817. SETSFXNAMES:
  1818.  
  1819. Menu Off 
  1820.  
  1821. REDRAW=1
  1822. Repeat 
  1823.    If REDRAW=1
  1824.       Gosub SFXNAMESHOW
  1825.       REDRAW=0
  1826.    End If 
  1827.    Pen RED : Paper 0
  1828.    Locate 0,31
  1829.    Centre "*** DONE ***"
  1830.    
  1831.    Gosub SFXNAMEPICK
  1832.    
  1833.    If Y>0 and Y<60
  1834.       If MC=1
  1835.          A$=Fsel$("","","Choose a RAW sample:")
  1836.          If Exist(A$)
  1837.             SFX$(Y-1)=A$
  1838.             REDRAW=1
  1839.          End If 
  1840.       End If 
  1841.       If MC=2
  1842.          If Exist(SFX$(Y-1))
  1843.             Open In 1,SFX$(Y-1)
  1844.             L=Lof(1)
  1845.             Close 1
  1846.             Erase 14
  1847.             Reserve As Chip Work 14,L
  1848.             Bload SFX$(Y-1),Start(14)
  1849.             Sam Raw $F,Start(14),L,8000
  1850.             REDRAW=0
  1851.          End If 
  1852.       End If 
  1853.    End If 
  1854.    
  1855. Until Y>=100
  1856.  
  1857. Cls 0
  1858.  
  1859. Menu On 
  1860.  
  1861. Return 
  1862.  
  1863. SFXNAMEPICK:
  1864.  
  1865. Repeat 
  1866.    MC=Mouse Click
  1867. Until MC<>0
  1868. Y=Y Screen(0,Y Mouse)
  1869. X=X Screen(0,X Mouse)
  1870. Y=Y/8
  1871. X=X/320
  1872. If Y>0 and Y<31
  1873.    Y=Y+X*30
  1874. Else 
  1875.    If Y>30
  1876.       Y=100
  1877.    End If 
  1878. End If 
  1879.  
  1880. Return 
  1881.  
  1882. SFXNAMESHOW:
  1883. Pen GREEN : Paper 0
  1884. Cls 0
  1885. Locate 0,0
  1886. Centre "SFX Filenames (Must be RAW format, half volume)"
  1887. Pen WHITE : Paper 0
  1888. For A=1 To 60
  1889.    If A<31
  1890.       Locate 0,A
  1891.       Print A;
  1892.       Locate 4, : Print SFX$(A-1)
  1893.    End If 
  1894.    If A>30
  1895.       Locate 40,A-30
  1896.       Print A;
  1897.       Locate 44, : Print SFX$(A-1)
  1898.    End If 
  1899. Next 
  1900. Return 
  1901.  
  1902. SETLEVELS:
  1903. Cls 0
  1904. Locate 0,0
  1905. F$=Fsel$("","","Pick a LEVELS directory")
  1906. F$=Dir$
  1907. Pen 2 : Paper 0
  1908. Print "Level directory set to ";
  1909. Pen 3 : Paper 0
  1910. Print F$
  1911. If Not(Exist(F$+"level_a"))
  1912.    Pen 1 : Paper 0
  1913.    Print "Create Level directories A-P (Y/N)?"
  1914.    Input A$
  1915.    If A$="y" or A$="Y"
  1916.       Pen 3 : Paper 0
  1917.       For A=Asc("A") To Asc("P")
  1918.          B$=Chr$(A)
  1919.          Mkdir F$+"LEVEL_"+B$
  1920.          Print F$+"LEVEL_"+B$+" created"
  1921.       Next 
  1922.       LEVELDIR$=F$
  1923.    End If 
  1924. Else 
  1925.    LEVELDIR$=F$
  1926. End If 
  1927. Return 
  1928. '
  1929. SETLEVELNAMES:
  1930.  
  1931. Menu Off 
  1932.  
  1933. Cls 0
  1934. Locate 0,0
  1935. Pen 3 : Paper 0
  1936. Print "  |------------------**------------------|"
  1937. Pen 2 : Paper 0
  1938. For A=0 To 15
  1939.    Print "  ";LEVNAME$(A)
  1940. Next 
  1941.  
  1942. Pen 1 : Paper 0
  1943. Print "                *** DONE ***              "
  1944.  
  1945. Repeat 
  1946.    Repeat 
  1947.    Until Mouse Click=1
  1948.    Y=Y Screen(0,Y Mouse)
  1949.    Y=Y/8
  1950.    
  1951.    If Y>0 and Y<17
  1952.       Pen 1 : Paper 0
  1953.       Locate 0,Y : Print Space$(42)
  1954.       Locate 0,Y : Input A$
  1955.       If Len(A$)<40
  1956.          A$=A$+Space$(40-Len(A$))
  1957.       End If 
  1958.       If Len(A$)>40
  1959.          A$=Left$(A$,40)
  1960.       End If 
  1961.       Locate 0,Y : LEVNAME$(Y-1)=A$ : Print Space$(79)
  1962.       Locate 0,Y : Pen 2 : Paper 0 : Print "  ";LEVNAME$(Y-1)
  1963.    End If 
  1964. Until Y=17
  1965.  
  1966. Cls 0
  1967. Locate 0,0
  1968. Menu On 
  1969.  
  1970. Return 
  1971.  
  1972. SETOBJGFXNAMES:
  1973.  
  1974. Menu Off 
  1975.  
  1976. Y=0
  1977. Repeat 
  1978.    
  1979.    Gosub PICKOBJGRAPHNAME
  1980.    
  1981.    If Y>0 and Y<=(TGR+1)
  1982.       If MC=1 or Not(Exist(OBJGFX$(Y-1)+".wad"))
  1983.          A$="OBJECT GFX #"+Str$(Y)
  1984.          A$=Fsel$("","",A$)
  1985.          A$=Upper$(A$)
  1986.          If A$="DELETE" and Y=TGR
  1987.             OBJGFX$(Y-1)=""
  1988.          Else 
  1989.             If Exist(A$)
  1990.                OBJGFX$(Y-1)=Left$(A$,Len(A$)-4)
  1991.             End If 
  1992.          End If 
  1993.          Locate 0,Y : Print Space$(79)
  1994.          
  1995.          Locate 0,Y : Pen 2 : Paper 0 : Print Y; : Locate 4, : Print OBJGFX$(Y-1)
  1996.       Else 
  1997.          Gosub SETOBJFRAMES
  1998.       End If 
  1999.    End If 
  2000. Until Y=31
  2001.  
  2002. Cls 0
  2003. Locate 0,0
  2004. Menu On 
  2005.  
  2006. Return 
  2007.  
  2008.  
  2009. SETVECTORNAMES:
  2010.  
  2011. Menu Off 
  2012.  
  2013. Y=0
  2014. Repeat 
  2015.    
  2016.    Gosub PICKVECTORNAME
  2017.    
  2018.    If Y>0 and Y<=(TGR+1)
  2019.       If MC=1 or Not(Exist(VECGFX$(Y-1)+".dat"))
  2020.          A$="VECTOR GFX #"+Str$(Y)
  2021.          A$=Fsel$("","",A$)
  2022.          A$=Upper$(A$)
  2023.          If A$="DELETE" and Y=TGR
  2024.             VECGFX$(Y-1)=""
  2025.          Else 
  2026.             If Exist(A$)
  2027.                VECGFX$(Y-1)=A$
  2028.             End If 
  2029.          End If 
  2030.          Locate 0,Y : Print Space$(79)
  2031.          
  2032.          Locate 0,Y : Pen 2 : Paper 0 : Print Y; : Locate 4, : Print VECGFX$(Y-1)
  2033.       End If 
  2034.    End If 
  2035. Until Y=31
  2036.  
  2037. Cls 0
  2038. Locate 0,0
  2039. Menu On 
  2040.  
  2041. Return 
  2042.  
  2043. VECTORNAMESHOW:
  2044. Cls 0
  2045. Locate 0,0
  2046. Pen 3 : Paper 0
  2047. Centre "Vector GFX Filenames"
  2048. Locate 0,1
  2049. Pen 2 : Paper 0
  2050. TGR=0
  2051. A=0
  2052. Repeat 
  2053.    A$=Str$(A+1)
  2054.    Print A$; : Locate 4, : Print VECGFX$(A)
  2055.    If VECGFX$(A)<>"" and TGR<29 Then TGR=TGR+1
  2056.    A=A+1
  2057. Until A>TGR
  2058.  
  2059. Return 
  2060.  
  2061. PICKVECTORNAME:
  2062.  
  2063. Gosub VECTORNAMESHOW
  2064.  
  2065. Pen 1 : Paper 0
  2066. Locate 0,31
  2067. Centre "DONE"
  2068.  
  2069. Repeat 
  2070.    MC=Mouse Click
  2071. Until MC<>0
  2072. Y=Y Screen(0,Y Mouse)
  2073. Y=Y/8
  2074.  
  2075. Return 
  2076.  
  2077.  
  2078. SETWALLNAMES:
  2079.  
  2080. Menu Off 
  2081.  
  2082. Y=0
  2083. Repeat 
  2084.    
  2085.    Gosub PICKWALLNAME
  2086.    
  2087.    If Y>0 and Y<=(TGR+1)
  2088.       If MC=1
  2089.          A$="WALL GFX #"+Str$(Y)
  2090.          A$=Fsel$("","",A$)
  2091.          A$=Upper$(A$)
  2092.          If Exist(A$)
  2093.             WALLGFX$(Y-1)=A$
  2094.             Open In 1,A$
  2095.             T=Lof(1)
  2096.             Close 1
  2097.             Bload A$,Start(15)
  2098.             WALLHEIGHT(Y-1)=Deek(Start(15)+T-2)
  2099.             
  2100.          End If 
  2101.          
  2102.          Locate 0,Y : Print Space$(79)
  2103.          
  2104.          Locate 0,Y : Pen 2 : Paper 0 : Print Y; : Locate 4, : Print WALLGFX$(Y-1)
  2105.       Else 
  2106.          If MC=2 and Y=TGR
  2107.             WALLGFX$(Y-1)=""
  2108.          End If 
  2109.       End If 
  2110.    End If 
  2111. Until Y=31
  2112.  
  2113. Cls 0
  2114. Locate 0,0
  2115. Menu On 
  2116.  
  2117. Return 
  2118.  
  2119. WALLNAMESHOW:
  2120. Cls 0
  2121. Locate 0,0
  2122. Pen 3 : Paper 0
  2123. Centre "Wall GFX Filenames"
  2124. Locate 0,1
  2125. Pen 2 : Paper 0
  2126. TGR=0
  2127. A=0
  2128. Repeat 
  2129.    A$=Str$(A+1)
  2130.    Print A$; : Locate 4, : Print WALLGFX$(A)
  2131.    If WALLGFX$(A)<>"" and TGR<15 Then TGR=TGR+1
  2132.    A=A+1
  2133. Until A>TGR
  2134.  
  2135. Return 
  2136.  
  2137. PICKWALLNAME:
  2138.  
  2139. Gosub WALLNAMESHOW
  2140.  
  2141. Pen 1 : Paper 0
  2142. Locate 0,31
  2143. Centre "DONE"
  2144.  
  2145. Repeat 
  2146.    MC=Mouse Click
  2147. Until MC<>0
  2148. Y=Y Screen(0,Y Mouse)
  2149. Y=Y/8
  2150.  
  2151. Return 
  2152.  
  2153.  
  2154.  
  2155.  
  2156. SETOBJFRAMES:
  2157.  
  2158. Screen Open 1,320,256,32,Lowres
  2159. Curs Off : Flash Off : Cls 0
  2160.  
  2161. If Not Exist(OBJGFX$(Y-1)+".256pal")
  2162.    Screen 0 : Cls 0 : Screen To Front 0
  2163.    Locate 0,10 : Pen RED : Centre "Palette file not found."
  2164.    Locate 0,12 : Centre "Error in loading: please select a different graphic file."
  2165.    Locate 0,14 : Pen GREEN : Centre "Any key to return to editor."
  2166.    Wait Key 
  2167.    Return 
  2168. End If 
  2169. Bload OBJGFX$(Y-1)+".256pal",Start(15)
  2170. Bload "ab3:includes/256pal",Start(15)+1024
  2171. For A=0 To 31 : 
  2172.    C=Peek(Start(15)+A*2)
  2173.    R=Deek(Start(15)+1024+C*6)
  2174.    G=Deek(Start(15)+1026+C*6)
  2175.    B=Deek(Start(15)+1028+C*6)
  2176.    Colour A,(R/16)*$100+(G/16)*$10+(B/16)
  2177. Next 
  2178.  
  2179. LIT=0
  2180. If Exist(OBJGFX$(Y-1)+".HQN")
  2181.    Bload OBJGFX$(Y-1)+".HQN",Start(15)
  2182.    LIT=1
  2183. Else 
  2184.    Bload OBJGFX$(Y-1)+".dat",Start(15)
  2185. End If 
  2186.  
  2187.  
  2188. XOF=0
  2189.  
  2190. Gosub WIDTHSHOW
  2191. Screen 0 : Screen To Front 0 : Screen Display 0,,42+140,,
  2192. Cls 0
  2193.  
  2194. CF=0
  2195.  
  2196. Gosub FRAMEDISPLAY
  2197.  
  2198. EX=0
  2199. Repeat 
  2200.    
  2201.    Repeat 
  2202.       LY=Y Screen(1,Y Mouse)
  2203.       LX=X Screen(1,X Mouse)
  2204.       If(LY<HOF) and(LX+XOF<NO*WOF)
  2205.          Screen 0 : Locate 0,0 : Pen WHITE : Wait Vbl : Print Using "X :###";LX; Using " Y :###";LY;
  2206.       End If 
  2207.    Until Mouse Click<>0
  2208.    
  2209.    LY=Y Screen(1,Y Mouse)
  2210.    LX=X Screen(1,X Mouse)
  2211.    If LY>140
  2212.       LY=(LY-140)/8
  2213.       LX=LX/8
  2214.       If LY=13
  2215.          EX=1
  2216.       End If 
  2217.       If LY=0
  2218.          If LX<28 and XOF>0
  2219.             Add XOF,-160
  2220.             Gosub WIDTHSHOW
  2221.          Else 
  2222.             If LX>28 and(XOF+319)<(WOF*NO)
  2223.                Add XOF,160
  2224.                Gosub WIDTHSHOW
  2225.             End If 
  2226.             
  2227.          End If 
  2228.       End If 
  2229.       If LY=2
  2230.          If LX>20 and LX<29
  2231.             CF=Max(CF-1,0)
  2232.             Gosub FRAMEDISPLAY
  2233.          End If 
  2234.          If LX>29
  2235.             CF=Min(63,CF+1)
  2236.             Gosub FRAMEDISPLAY
  2237.          End If 
  2238.       End If 
  2239.       If LY=4
  2240.          Screen 0
  2241.          Locate 15,4
  2242.          Input O
  2243.          OGFRAMES(Y-1,CF,0)=O and $FFFF
  2244.          Gosub FRAMEDISPLAY
  2245.       End If 
  2246.       If LY=5
  2247.          Screen 0
  2248.          Locate 15,5
  2249.          Input O
  2250.          OGFRAMES(Y-1,CF,1)=O and $FFFF
  2251.          Gosub FRAMEDISPLAY
  2252.       End If 
  2253.       If LY=6
  2254.          Screen 0
  2255.          Locate 15,6
  2256.          Input O
  2257.          OGFRAMES(Y-1,CF,2)=O and $FFFE
  2258.          Gosub FRAMEDISPLAY
  2259.       End If 
  2260.       If LY=7
  2261.          Screen 0
  2262.          Locate 15,7
  2263.          Input O
  2264.          OGFRAMES(Y-1,CF,3)=O and $FFFE
  2265.          Gosub FRAMEDISPLAY
  2266.       End If 
  2267.       If LY=9
  2268.          If LX<20 and CF>0
  2269.             For A=0 To CF-1
  2270.                OGFRAMES(Y-1,A,2)=OGFRAMES(Y-1,CF,2)
  2271.             Next 
  2272.          Else 
  2273.             If CF<63
  2274.                For A=CF+1 To 63
  2275.                   OGFRAMES(Y-1,A,2)=OGFRAMES(Y-1,CF,2)
  2276.                Next 
  2277.             End If 
  2278.          End If 
  2279.       End If 
  2280.       If LY=10
  2281.          If LX<20 and CF>0
  2282.             For A=0 To CF-1
  2283.                OGFRAMES(Y-1,A,3)=OGFRAMES(Y-1,CF,3)
  2284.             Next 
  2285.          Else 
  2286.             If CF<63
  2287.                For A=CF+1 To 63
  2288.                   OGFRAMES(Y-1,A,3)=OGFRAMES(Y-1,CF,3)
  2289.                Next 
  2290.             End If 
  2291.          End If 
  2292.       End If 
  2293.       If LY=11
  2294.          For A=0 To NO-1
  2295.             OGFRAMES(Y-1,A,0)=A*WOF
  2296.             OGFRAMES(Y-1,A,1)=0
  2297.             OGFRAMES(Y-1,A,2)=WOF
  2298.             OGFRAMES(Y-1,A,3)=HOF
  2299.          Next 
  2300.          Gosub FRAMEDISPLAY
  2301.       End If 
  2302.    Else 
  2303.       If(LY<HOF) and(LX+XOF<NO*WOF)
  2304.          OGFRAMES(Y-1,CF,0)=LX : OGFRAMES(Y-1,CF,1)=LY : Gosub FRAMEDISPLAY
  2305.       End If 
  2306.    End If 
  2307.    
  2308. Until EX=1
  2309.  
  2310. Screen Close 1
  2311. Screen 0
  2312. Rainbow 1,0,0,0
  2313. Screen Display 0,,42,,
  2314.  
  2315. Return 
  2316.  
  2317. FRAMEDISPLAY:
  2318.  
  2319. Cls 0
  2320. Paper 0 : Pen RED
  2321. Locate 40,0 : Print "[ SCROLL LEFT ] [ SCROLL RIGHT ]"
  2322.  
  2323. Locate 0,2 : Pen GREEN : Print "Frame number : "; : Pen WHITE : Print CF
  2324. Locate 40,2 : Pen RED : Print "[ PREVIOUS FRAME ] [ NEXT FRAME ]"
  2325.  
  2326. Locate 0,4 : Pen GREEN : Print "Frame left   : "; : Pen RED : Print OGFRAMES(Y-1,CF,0)
  2327. Locate 0,5 : Pen GREEN : Print "Frame top    : "; : Pen RED : Print OGFRAMES(Y-1,CF,1)
  2328. Locate 0,6 : Pen GREEN : Print "Frame width  : "; : Pen RED : Print OGFRAMES(Y-1,CF,2)
  2329. Locate 0,7 : Pen GREEN : Print "Frame height : "; : Pen RED : Print OGFRAMES(Y-1,CF,3)
  2330. Locate 0,9 : Pen RED : Centre "[  Copy width to previous frames  ][ Copy width to subsequent frames ]"
  2331. Locate 0,10 : Pen RED : Centre "[  Copy height to previous frames  ][ Copy height to subsequent frames ]"
  2332. Locate 0,11 : Pen GREEN : Centre "[ Generate frames from graphic data ]"
  2333. Locate 0,13 : Pen RED : Centre "*** DONE ***"
  2334.  
  2335. Return 
  2336.  
  2337. WIDTHSHOW:
  2338. SC=Screen : Screen 1
  2339. Cls 0
  2340. S=Start(15)+6+(HOF*XOF)
  2341. NO=Deek(Start(15))
  2342. WOF=Deek(Start(15)+2)
  2343. HOF=Deek(Start(15)+4)
  2344.  
  2345. M$="("+(Str$(HOF)-" ")+",0,1)(1,15,1)("+(Str$(Max(1,(140-HOF)/15))-" ")+",-1,15)"
  2346. Set Rainbow 1,0,256,M$,M$,M$
  2347. Rainbow 1,0,42,140
  2348.  
  2349. RX=Min(319,(WOF*NO-1)-XOF)
  2350.  
  2351. For X=0 To RX
  2352.    For L=0 To HOF-1
  2353.        Extension_12_036E X,L,Peek(S) : Add S,1
  2354.    Next 
  2355. Next 
  2356.  
  2357. Screen SC
  2358.  
  2359. Return 
  2360.  
  2361. OBJGRAPHNAMESHOW:
  2362. Cls 0
  2363. Locate 0,0
  2364. Pen 3 : Paper 0
  2365. Centre "Object GFX Filenames"
  2366. Locate 0,1
  2367. Pen 2 : Paper 0
  2368. TGR=0
  2369. A=0
  2370. Repeat 
  2371.    A$=Str$(A+1)
  2372.    Print A$; : Locate 4, : Print OBJGFX$(A)
  2373.    If OBJGFX$(A)<>"" and TGR<29 Then TGR=TGR+1
  2374.    A=A+1
  2375. Until A>TGR
  2376.  
  2377. Return 
  2378.  
  2379. PICKOBJGRAPHNAME:
  2380.  
  2381. Gosub OBJGRAPHNAMESHOW
  2382.  
  2383. Pen 1 : Paper 0
  2384. Locate 0,31
  2385. Centre "DONE"
  2386.  
  2387. Repeat 
  2388.    MC=Mouse Click
  2389. Until MC<>0
  2390. Y=Y Screen(0,Y Mouse)
  2391. Y=Y/8
  2392.  
  2393. Return 
  2394.  
  2395. SETFLOORTILENAME:
  2396.  
  2397. T$="Floor Tile"
  2398. Gosub TEXNAMEGET
  2399. If BACK$<>"" Then FTMNAME$=BACK$
  2400.  
  2401. Return 
  2402.  
  2403. SETTEXNAME:
  2404.  
  2405. T$="Texture"
  2406. Gosub TEXNAMEGET
  2407. If BACK$<>"" Then TEXNAME$=BACK$
  2408.  
  2409. Return 
  2410.  
  2411. TEXNAMEGET:
  2412.  
  2413. Cls 0
  2414. Locate 0,0
  2415.  
  2416. BACK$=""
  2417.  
  2418. A$=Fsel$("","","Select a texture file")
  2419. A$=Upper$(A$)
  2420.  
  2421. If Exist(A$)
  2422.    Open In 1,A$
  2423.    Pen WHITE : Paper 0
  2424.    Print T$;" filename set to ";
  2425.    Pen GREEN : Paper 0
  2426.    Print A$
  2427.    BACK$=A$
  2428.    Close 1
  2429. Else 
  2430.    Pen RED : Paper 0
  2431.    Print "FILE NOT FOUND"
  2432. End If 
  2433.  
  2434. Return 
  2435.  
  2436. SETGUNGFXNAME:
  2437.  
  2438. Cls 0
  2439. Locate 0,0
  2440.  
  2441. A$=Fsel$("","","Select a .ODF file")
  2442. A$=Upper$(A$)
  2443.  
  2444. If Exist(A$)
  2445.    Pen WHITE : Paper 0
  2446.    Print "Gun Graphics filename set to ";
  2447.    Pen GREEN : Paper 0
  2448.    Print A$
  2449.    FTMNAME$=A$
  2450. Else 
  2451.    Pen RED : Paper 0
  2452.    Print "FILE NOT FOUND"
  2453. End If 
  2454.  
  2455. Return 
  2456.  
  2457. SETALIENNAME:
  2458.  
  2459. Menu Off 
  2460.  
  2461. Repeat 
  2462.    Gosub ALIENNAMESHOW
  2463.    
  2464.    Repeat : MC=Mouse Click
  2465.    Until MC<>0
  2466.    Y=Y Screen(0,Y Mouse)/8
  2467.    X=X Screen(0,X Mouse)/8
  2468.    Y=Y-1
  2469.    
  2470.    If Y>=0 and Y<=ALMAX
  2471.       If X<40
  2472.          Locate 4,Y+1 : Pen RED : Input ALNAME$(Y)
  2473.       Else If X<70
  2474.          Gosub SETALIENSTATS
  2475.       Else 
  2476.          OY=Y
  2477.          Pen GREEN : Locate 0,30 : Print "Select space to copy to:"
  2478.          Repeat : MC=Mouse Click
  2479.          Until MC<>0
  2480.          Y=Y Screen(0,Y Mouse)/8
  2481.          X=X Screen(0,X Mouse)/8
  2482.          Y=Y-1
  2483.          
  2484.          If Y>=0 and Y<=ALMAX
  2485.             
  2486.             ALNAME$(Y)=ALNAME$(OY)
  2487.             ALBRIGHT(Y)=ALBRIGHT(OY)
  2488.             For A=0 To 19
  2489.                ALSTAT(Y,A)=ALSTAT(OY,A)
  2490.                For B=0 To 10 : For C=0 To 10
  2491.                      ALANIM(Y,B,A,C)=ALANIM(OY,B,A,C)
  2492.                   Next 
  2493.                Next 
  2494.             Next 
  2495.             ALSTAT(Y,20)=ALSTAT(OY,20)
  2496.             
  2497.          End If 
  2498.          
  2499.       End If 
  2500.    End If 
  2501.    
  2502.    If Y=28
  2503.       Locate 0,29 : Pen GREEN : Print Space$(80);
  2504.       Locate 0,29 : Centre "Select alien to scale:"
  2505.       Repeat : Until Mouse Click
  2506.       F=Y Screen(0,Y Mouse)/8
  2507.       If F>0 and F<=ALMAX+1
  2508.          F=F-1
  2509.          Locate 0,29 : Input "New percentage of original size: ";P
  2510.          For A=0 To 10
  2511.             For B=0 To 19
  2512.                ALANIM(F,A,B,2)=(ALANIM(F,A,B,2)*P)/100
  2513.                ALANIM(F,A,B,3)=(ALANIM(F,A,B,3)*P)/100
  2514.                ALANIM(F,A,B,4)=(ALANIM(F,A,B,4)*P)/100
  2515.                ALANIM(F,A,B,9)=(ALANIM(F,A,B,9)*P)/100
  2516.                ALANIM(F,A,B,10)=(ALANIM(F,A,B,10)*P)/100
  2517.             Next 
  2518.          Next 
  2519.          ALSTAT(F,17)=(ALSTAT(F,17)*P)/100
  2520.       End If 
  2521.    End If 
  2522.    
  2523. Until Y=30
  2524.  
  2525. Cls 0
  2526. Menu On 
  2527.  
  2528. Return 
  2529.  
  2530. SETALIENSTATS:
  2531.  
  2532. AN=Y
  2533.  
  2534. Repeat 
  2535.    Gosub ALIENSTATSHOW
  2536.    Repeat : MC=Mouse Click
  2537.    Until MC<>0
  2538.    Y=Y Screen(0,Y Mouse)/8
  2539.    
  2540.    If Y=1
  2541.       ALSTAT(AN,0)=(ALSTAT(AN,0)+1) mod 6
  2542.    End If 
  2543.    
  2544.    If Y=3
  2545.       If ALSTAT(AN,0)<>1
  2546.          Gosub DEFALIENANIM
  2547.       Else 
  2548.          Gosub DEFALIENVECTORANIM
  2549.       End If 
  2550.       
  2551.    End If 
  2552.    
  2553.    If Y=ZED
  2554.       If MC=1
  2555.          Add ALSTAT(AN,1),1
  2556.          If DEFB$(ALSTAT(AN,1))=""
  2557.             ALSTAT(AN,1)=0
  2558.          End If 
  2559.       Else 
  2560.          Add ALSTAT(AN,1),-1
  2561.          If ALSTAT(AN,1)=-1
  2562.             ALSTAT(AN,1)=10
  2563.             Repeat 
  2564.                Add ALSTAT(AN,1),-1
  2565.             Until DEFB$(ALSTAT(AN,1))<>""
  2566.          End If 
  2567.       End If 
  2568.    End If 
  2569.    
  2570.    If(Y=ZED+1 or Y=ZED+2) or(Y>=ZED+4 and Y<=ZED+7) or(Y=ZED+9 or Y=ZED+10) or(Y=ZED+12 or Y=ZED+13)
  2571.       Locate 40,Y : Pen RED : Input ALSTAT(AN,(Y-ZED)+1)
  2572.    End If 
  2573.    
  2574.    If Y=ZED+3
  2575.       If MC=1
  2576.          Add ALSTAT(AN,4),1
  2577.          If RESB$(ALSTAT(AN,4))=""
  2578.             ALSTAT(AN,4)=0
  2579.          End If 
  2580.       Else 
  2581.          Add ALSTAT(AN,4),-1
  2582.          If ALSTAT(AN,4)=-1
  2583.             ALSTAT(AN,4)=10
  2584.             Repeat 
  2585.                Add ALSTAT(AN,4),-1
  2586.             Until RESB$(ALSTAT(AN,4))<>""
  2587.          End If 
  2588.       End If 
  2589.    End If 
  2590.    
  2591.    If Y=ZED+8
  2592.       If MC=1
  2593.          Add ALSTAT(AN,9),1
  2594.          If FOLB$(ALSTAT(AN,9))=""
  2595.             ALSTAT(AN,9)=0
  2596.          End If 
  2597.       Else 
  2598.          Add ALSTAT(AN,9),-1
  2599.          If ALSTAT(AN,9)=-1
  2600.             ALSTAT(AN,9)=10
  2601.             Repeat 
  2602.                Add ALSTAT(AN,9),-1
  2603.             Until FOLB$(ALSTAT(AN,9))<>""
  2604.          End If 
  2605.       End If 
  2606.    End If 
  2607.    
  2608.    If Y=ZED+11
  2609.       If MC=1
  2610.          Add ALSTAT(AN,12),1
  2611.          If RETB$(ALSTAT(AN,12))=""
  2612.             ALSTAT(AN,12)=0
  2613.          End If 
  2614.       Else 
  2615.          Add ALSTAT(AN,12),-1
  2616.          If ALSTAT(AN,12)=-1
  2617.             ALSTAT(AN,12)=10
  2618.             Repeat 
  2619.                Add ALSTAT(AN,12),-1
  2620.             Until RETB$(ALSTAT(AN,12))<>""
  2621.          End If 
  2622.       End If 
  2623.    End If 
  2624.    
  2625.    If Y=ZED+14
  2626.       DN=0
  2627.       While DN=0
  2628.          Gosub BULDATSHOW
  2629.          Locate 0,30
  2630.          Pen RED : Centre "[ Select Alien to Spawn Instead ]"
  2631.          Repeat 
  2632.             Repeat 
  2633.             Until Mouse Click
  2634.             F=Y Screen(0,Y Mouse)
  2635.             F=F/8
  2636.          Until(F>0 and F<21) or F=30
  2637.          If F=30
  2638.             Gosub ALIENNAMESHOW
  2639.             Ink 0 : Bar 320,8 To 640,240
  2640.             Pen RED : Locate 0,30
  2641.             Centre "[ Select Bullet to Fire Instead ]"
  2642.             Repeat 
  2643.                Repeat 
  2644.                Until Mouse Click
  2645.                F=Y Screen(0,Y Mouse)
  2646.                F=F/8
  2647.             Until(F>0 and F<21) or F=30
  2648.             If F<>30 : DN=1 : F=F+20 : End If 
  2649.          Else 
  2650.             DN=1
  2651.          End If 
  2652.       Wend 
  2653.       ALSTAT(AN,15)=F-1
  2654.    End If 
  2655.    
  2656.    If Y=ZED+15
  2657.       Locate 40,Y : Ink RED : Input ALS : ALSTAT(AN,16)=ALS/4
  2658.    End If 
  2659.    If Y=ZED+16
  2660.       Locate 40,Y : Ink RED : Input ALSTAT(AN,17)
  2661.    End If 
  2662.    If Y=ZED+17
  2663.       Locate 40,Y : Ink RED : Input ALSTAT(AN,18)
  2664.    End If 
  2665.    If Y=ZED+18
  2666.       DN=0
  2667.       While DN=0
  2668.          Gosub BULDATSHOW
  2669.          Locate 0,30
  2670.          Pen RED : Centre "[ Select Alien to Spawn Instead ]"
  2671.          Repeat 
  2672.             Repeat 
  2673.             Until Mouse Click
  2674.             F=Y Screen(0,Y Mouse)
  2675.             F=F/8
  2676.          Until(F>0 and F<21) or F=30
  2677.          If F=30
  2678.             Gosub ALIENNAMESHOW
  2679.             Ink 0 : Bar 320,8 To 640,240
  2680.             Pen RED : Locate 0,30
  2681.             Centre "[ Select Projectile Instead ]"
  2682.             Repeat 
  2683.                Repeat 
  2684.                Until Mouse Click
  2685.                F=Y Screen(0,Y Mouse)
  2686.                F=F/8
  2687.             Until(F>0 and F<21) or F=30
  2688.             If F<>30 : DN=1 : F=F+20 : End If 
  2689.          Else 
  2690.             DN=1
  2691.          End If 
  2692.       Wend 
  2693.       
  2694.       ALSTAT(AN,19)=F-1
  2695.    End If 
  2696.    If Y=ZED+19
  2697.       Gosub OBJNAMESHOW
  2698.       Repeat 
  2699.       Until Mouse Click
  2700.       F=Y Screen(0,Y Mouse)
  2701.       F=F/8
  2702.       ALSTAT(AN,20)=F-1
  2703.    End If 
  2704.    If Y=ZED+20
  2705.       Locate 40,ZED+20
  2706.       Pen RED
  2707.       Input ALBRIGHT(AN)
  2708.    End If 
  2709.    If Y=ZED+21
  2710.       Locate 40,ZED+21
  2711.       Pen RED
  2712.       Input ALSHOTXOFF(AN)
  2713.    End If 
  2714.    If Y=ZED+22
  2715.       Locate 40,ZED+22
  2716.       Pen RED
  2717.       Input ALSHOTYOFF(AN)
  2718.    End If 
  2719.    
  2720. Until Y=31
  2721.  
  2722. Return 
  2723.  
  2724. ALIENSTATSHOW:
  2725.  
  2726. Cls 0
  2727.  
  2728. Locate 0,0 : Pen GREEN
  2729. Centre "Characteristics of alien :"+ALNAME$(AN)
  2730.  
  2731. Locate 0,1 : Pen WHITE
  2732. Print "Graphic type:                          :"
  2733. Locate 40,1 : Pen RED
  2734. Print GFXTYPE$(ALSTAT(AN,0))
  2735.  
  2736. Locate 0,3 : Pen RED
  2737. Centre "[ Define Animation Frames ]"
  2738.  
  2739. ZED=4 : Locate 0,ZED : Pen WHITE
  2740. Print "Default Behaviour                      :"
  2741. Locate 40,ZED : Pen GREEN
  2742. Print DEFB$(ALSTAT(AN,1))
  2743.  
  2744. Locate 0,ZED+1 : Pen WHITE
  2745. Print "Reaction Time (50=1sec)                :"
  2746. Locate 40,ZED+1 : Pen GREEN
  2747. Print ALSTAT(AN,2)
  2748.  
  2749. Locate 0,ZED+2 : Pen WHITE
  2750. Print "Default movement speed                 :"
  2751. Locate 40,ZED+2 : Pen GREEN
  2752. Print ALSTAT(AN,3)
  2753.  
  2754. Locate 0,ZED+3 : Pen WHITE
  2755. Print "Response Behaviour                     :"
  2756. Locate 40,ZED+3 : Pen GREEN
  2757. Print RESB$(ALSTAT(AN,4))
  2758.  
  2759. Locate 0,ZED+4 : Pen WHITE
  2760. Print "Response movement speed                :"
  2761. Locate 40,ZED+4 : Pen GREEN
  2762. Print ALSTAT(AN,5)
  2763.  
  2764. Locate 0,ZED+5 : Pen WHITE
  2765. Print "Response Timeout (50=1sec)             :"
  2766. Locate 40,ZED+5 : Pen GREEN
  2767. Print ALSTAT(AN,6)
  2768.  
  2769. Locate 0,ZED+6 : Pen WHITE
  2770. Print "Damage Taken Limit -> Retreat          :"
  2771. Locate 40,ZED+6 : Pen GREEN
  2772. Print ALSTAT(AN,7)
  2773.  
  2774. Locate 0,ZED+7 : Pen WHITE
  2775. Print "Damage Inflicted Limit -> Followup     :"
  2776. Locate 40,ZED+7 : Pen GREEN
  2777. Print ALSTAT(AN,8)
  2778.  
  2779. Locate 0,ZED+8 : Pen WHITE
  2780. Print "Followup Behaviour                     :"
  2781. Locate 40,ZED+8 : Pen GREEN
  2782. Print FOLB$(ALSTAT(AN,9))
  2783.  
  2784. Locate 0,ZED+9 : Pen WHITE
  2785. Print "Followup Movement Speed                :"
  2786. Locate 40,ZED+9 : Pen GREEN
  2787. Print ALSTAT(AN,10)
  2788.  
  2789. Locate 0,ZED+10 : Pen WHITE
  2790. Print "Followup Timeout (50=1sec)             :"
  2791. Locate 40,ZED+10 : Pen GREEN
  2792. Print ALSTAT(AN,11)
  2793.  
  2794. Locate 0,ZED+11 : Pen WHITE
  2795. Print "Retreat Behaviour                      :"
  2796. Locate 40,ZED+11 : Pen GREEN
  2797. Print RETB$(ALSTAT(AN,12))
  2798.  
  2799. Locate 0,ZED+12 : Pen WHITE
  2800. Print "Retreat Movement Speed                 :"
  2801. Locate 40,ZED+12 : Pen GREEN
  2802. Print ALSTAT(AN,13)
  2803.  
  2804. Locate 0,ZED+13 : Pen WHITE
  2805. Print "Retreat Timeout (50=1sec)              :"
  2806. Locate 40,ZED+13 : Pen GREEN
  2807. Print ALSTAT(AN,14)
  2808.  
  2809. Locate 0,ZED+14 : Pen WHITE
  2810. If ALSTAT(AN,15)<20
  2811.    Print "Type Of Bullet Fired                   :"
  2812.    Locate 40,ZED+14 : Pen GREEN
  2813.    Print BULNAME$(ALSTAT(AN,15))
  2814. Else 
  2815.    Print "Type Of Alien Spawned                  :"
  2816.    Locate 40,ZED+14 : Pen GREEN
  2817.    Print ALNAME$(ALSTAT(AN,15)-20)
  2818. End If 
  2819.  
  2820. Locate 0,ZED+15 : Pen WHITE
  2821. Print "Number Of Hit Points                   :"
  2822. Locate 40,ZED+15 : Pen GREEN
  2823. Print ALSTAT(AN,16)*4
  2824.  
  2825. Locate 0,ZED+16 : Pen WHITE
  2826. Print "Physical Height                        :"
  2827. Locate 40,ZED+16 : Pen GREEN
  2828. Print ALSTAT(AN,17)
  2829.  
  2830. Locate 0,ZED+17 : Pen WHITE
  2831. Print "Minimum distance to walls (0/1/2)      :"
  2832. Locate 40,ZED+17 : Pen GREEN
  2833. Print ALSTAT(AN,18)
  2834.  
  2835. Locate 0,ZED+18 : Pen WHITE
  2836. If ALSTAT(AN,19)<20
  2837.    Print "Projectiles ejected upon death         :"
  2838.    Locate 40,ZED+18 : Pen GREEN
  2839.    Print BULNAME$(ALSTAT(AN,19))
  2840. Else 
  2841.    Print "Aliens spawned upon death              :"
  2842.    Locate 40,ZED+18 : Pen GREEN
  2843.    Print ALNAME$(ALSTAT(AN,19)-20)
  2844. End If 
  2845.  
  2846. Locate 0,ZED+19 : Pen WHITE
  2847. Print "Auxilliary Object Type:                :"
  2848. Locate 40,ZED+19 : Pen GREEN
  2849. If ALSTAT(AN,20)>=0
  2850.    Print OBNAME$(ALSTAT(AN,20))
  2851. Else 
  2852.    Print "None."
  2853. End If 
  2854.  
  2855. Locate 0,ZED+20 : Pen WHITE
  2856. Print "Torch Brightness                       :"
  2857. Locate 40,ZED+20 : Pen GREEN
  2858. Print ALBRIGHT(AN)
  2859.  
  2860. Locate 0,ZED+21 : Pen WHITE
  2861. Print "Bullet Source X Offset                 :"
  2862. Locate 40,ZED+21 : Pen GREEN
  2863. Print ALSHOTXOFF(AN)
  2864.  
  2865. Locate 0,ZED+22 : Pen WHITE
  2866. Print "Bullet Source Y Offset                 :"
  2867. Locate 40,ZED+22 : Pen GREEN
  2868. Print ALSHOTYOFF(AN)
  2869.  
  2870. Locate 0,31 : Pen RED : Centre "*** DONE ***"
  2871.  
  2872. Return 
  2873.  
  2874. DEFALIENANIM:
  2875.  
  2876. Repeat 
  2877.    Gosub SUBSETSHOW
  2878.    Repeat : Until Mouse Click<>0
  2879.    Y=Y Screen(0,Y Mouse)
  2880.    Y=Y/8
  2881.    If Y=2
  2882.       OP=0 : M$="Front Facing Movement"
  2883.       Gosub DEFALAN
  2884.    End If 
  2885.    If Y=4
  2886.       OP=1 : M$="Front-Right Facing Movement"
  2887.       Gosub DEFALAN
  2888.    End If 
  2889.    If Y=6
  2890.       OP=2 : M$="Right Facing Movement"
  2891.       Gosub DEFALAN
  2892.    End If 
  2893.    If Y=8
  2894.       OP=3 : M$="Back-Right Facing Movement"
  2895.       Gosub DEFALAN
  2896.    End If 
  2897.    If Y=10
  2898.       OP=4 : M$="Back Facing Movement"
  2899.       Gosub DEFALAN
  2900.    End If 
  2901.    If Y=12
  2902.       OP=5 : M$="Back-Left Facing Movement"
  2903.       Gosub DEFALAN
  2904.    End If 
  2905.    If Y=14
  2906.       OP=6 : M$="Left Facing Movement"
  2907.       Gosub DEFALAN
  2908.    End If 
  2909.    If Y=16
  2910.       OP=7 : M$="Front-Left Facing Movement"
  2911.       Gosub DEFALAN
  2912.    End If 
  2913.    If Y=18
  2914.       OP=8 : M$="Attacking Action"
  2915.       Gosub DEFALAN
  2916.    End If 
  2917.    If Y=20
  2918.       OP=9 : M$="Recieving Damage Action"
  2919.       Gosub DEFALAN
  2920.    End If 
  2921.    If Y=22
  2922.       OP=10 : M$="Dying Action"
  2923.       Gosub DEFALAN
  2924.    End If 
  2925.    If Y=29
  2926.       Locate 0,31 : Pen GREEN : Centre "     SELECT ANIM TO COPY FROM     "
  2927.       Repeat 
  2928.       Until Mouse Click<>0
  2929.       F=Y Screen(0,Y Mouse)/16
  2930.       If F>0 and F<12
  2931.          OF=F-1
  2932.          Locate 0,31 : Pen GREEN : Centre "     SELECT ANIM TO COPY TO     "
  2933.          Repeat 
  2934.          Until Mouse Click<>0
  2935.          F=Y Screen(0,Y Mouse)/16
  2936.          If F>0 and F<12
  2937.             F=F-1
  2938.             For A=0 To 19 : For B=0 To 10
  2939.                   ALANIM(AN,F,A,B)=ALANIM(AN,OF,A,B)
  2940.             Next : Next 
  2941.          End If 
  2942.       End If 
  2943.    End If 
  2944. Until Y=31
  2945.  
  2946. Y=0
  2947. Return 
  2948.  
  2949. ALANIMSHOW:
  2950. Cls 0
  2951. Pen GREEN : Paper 0
  2952. Locate 0,0
  2953. A$="Animation frames for "+ALNAME$(AN)+" "+M$
  2954. Centre A$
  2955. 'Locate 40,0 
  2956. 'Pen WHITE 
  2957. 'Print "Frame Width:"
  2958. 'Locate 53,0 
  2959. 'Pen RED 
  2960. 'Print Using "###";BFW(BULNUM) 
  2961. 'Locate 60,0 
  2962. 'Pen WHITE 
  2963. 'Print "Frame Height:" 
  2964. 'Locate 74,0 
  2965. 'Pen RED 
  2966. 'Print Using "###";BFH(BULNUM) 
  2967. A=-1
  2968. Repeat 
  2969.    Add A,1
  2970.    If ALANIM(AN,OP,A,0)>-1
  2971.       B=(A mod 30)+1
  2972.       C=(A/30)*40
  2973.       Locate C,B
  2974.       Pen WHITE
  2975.       Print Using "## ";A;
  2976.       Print "GF:";
  2977.       Pen RED
  2978.       Print Using "## ";ALANIM(AN,OP,A,0)+1;
  2979.       Pen WHITE
  2980.       Print "FN:";
  2981.       Pen RED
  2982.       If ALANIM(AN,OP,A,1)<0
  2983.          Print "R";
  2984.       Else 
  2985.          Print " ";
  2986.       End If 
  2987.       Print Using "##";Abs(ALANIM(AN,OP,A,1));
  2988.       Pen WHITE
  2989.       Print "SW:";
  2990.       Pen RED
  2991.       Print Using "### ";ALANIM(AN,OP,A,2);
  2992.       Pen WHITE
  2993.       Print "SH:";
  2994.       Pen RED
  2995.       Print Using "### ";ALANIM(AN,OP,A,3);
  2996.       Pen WHITE
  2997.       Print "VO:";
  2998.       Pen RED
  2999.       Print Using "+## ";ALANIM(AN,OP,A,4);
  3000.       Pen WHITE
  3001.       Print "FX:";
  3002.       Pen RED
  3003.       Print Using "## ";ALANIM(AN,OP,A,5);
  3004.       Pen WHITE
  3005.       Print "AC:";
  3006.       Pen RED
  3007.       If ALANIM(AN,OP,A,6)=1
  3008.          Print " * ";
  3009.       Else 
  3010.          Print "   ";
  3011.       End If 
  3012.       Pen WHITE
  3013.       Print "AI:";
  3014.       Pen RED
  3015.       A7=ALANIM(AN,OP,A,7)
  3016.       If A7=0
  3017.          Print " v ";
  3018.       Else If A7/64=1
  3019.          Print "S"; Using "##";A7 and 63;
  3020.       Else If A7/64=2
  3021.          Print "R"; Using "##";A7 and 63;
  3022.       Else 
  3023.          Print "D"; Using "##";A7 and 63;
  3024.       End If 
  3025.       
  3026.       Pen WHITE
  3027.       Print "AUX:";
  3028.       Pen RED
  3029.       If ALANIM(AN,OP,A,8)>=0
  3030.          
  3031.          Print Using "##";ALANIM(AN,OP,A,8);
  3032.       Else 
  3033.          Print "  ";
  3034.       End If 
  3035.       
  3036.       Pen WHITE
  3037.       Print "XO:";
  3038.       Pen RED
  3039.       Print Using "+###";ALANIM(AN,OP,A,9)*2;
  3040.       Pen WHITE
  3041.       Print "YO:";
  3042.       Pen RED
  3043.       Print Using "+###";ALANIM(AN,OP,A,10)*2;
  3044.       
  3045.       Print 
  3046.    End If 
  3047. Until ALANIM(AN,OP,A,0)<0 or A=19
  3048. AMAX=A-1
  3049.  
  3050. Locate 0,31
  3051. Pen GREEN
  3052. Print " * ADD FRAME *  * DEL FRAME * ";
  3053. Locate 60,31
  3054. Pen RED
  3055. Print "*** DONE ***";
  3056.  
  3057. Return 
  3058.  
  3059. DEFALAN:
  3060.  
  3061. Repeat 
  3062.    Gosub ALANIMSHOW
  3063.    Repeat 
  3064.       MC=Mouse Click
  3065.       X=X Screen(0,X Mouse)/8
  3066.       Y=Y Screen(0,Y Mouse)/8
  3067.    Until MC<>0
  3068.    
  3069.    If Y=31
  3070.       If X<15
  3071.          If AMAX<19
  3072.             Add AMAX,1
  3073.             For J=0 To 10
  3074.                ALANIM(AN,OP,AMAX,J)=ALANIM(AN,OP,AMAX-1,J)
  3075.             Next 
  3076.          End If 
  3077.       Else 
  3078.          If X<30 and AMAX>0
  3079.             Add AMAX,-1
  3080.             ALANIM(AN,OP,AMAX+1,0)=-1
  3081.          End If 
  3082.       End If 
  3083.    End If 
  3084.    
  3085.    Z=(Y-1)
  3086.    DX=X-3
  3087.    
  3088.    '   If Y=0 
  3089.    '      If X>40 and X<60
  3090.    '         Pen GREEN
  3091.    '         Locate 0,31 : Input "FRAME WIDTH :";BFW(BULNUM); 
  3092.    '      End If  
  3093.    '      If X>60 
  3094.    '         Pen GREEN
  3095.    '         Locate 0,31 : Input "FRAME HEIGHT :";BFH(BULNUM);
  3096.    '      End If  
  3097.    '   End If 
  3098.    
  3099.    If Y>0 and Y<=AMAX+1
  3100.       If DX>2 and DX<6
  3101.          Gosub PICKOBJGRAPHNAME
  3102.          ALANIM(AN,OP,Z,0)=Y-1
  3103.       End If 
  3104.       If DX>8 and DX<12
  3105.          If MC=2
  3106.             FRAMEPICK[ALANIM(AN,OP,Z,0),ALANIM(AN,OP,Z,1)]
  3107.             ALANIM(AN,OP,Z,1)=Param
  3108.             Gosub ALANIMSHOW
  3109.          Else 
  3110.             Pen GREEN
  3111.             Locate 0,31 : Input "FRAME NUMBER :";ALANIM(AN,OP,Z,1);
  3112.          End If 
  3113.       End If 
  3114.       If DX>14 and DX<19
  3115.          Pen GREEN
  3116.          Locate 0,31 : Input "SCALED WIDTH :";ALANIM(AN,OP,Z,2);
  3117.       End If 
  3118.       If DX>21 and DX<26
  3119.          Pen GREEN
  3120.          Locate 0,31 : Input "SCALED HEIGHT :";ALANIM(AN,OP,Z,3);
  3121.       End If 
  3122.       If DX>28 and DX<33
  3123.          Pen GREEN
  3124.          Locate 0,31 : Input "VERTICAL OFFSET:";ALANIM(AN,OP,Z,4);
  3125.       End If 
  3126.       If DX>35 and DX<39
  3127.          Gosub SFXNAMESHOW
  3128.          Gosub SFXNAMEPICK
  3129.          
  3130.          ALANIM(AN,OP,Z,5)=Y
  3131.          
  3132.       End If 
  3133.       If DX>41 and DX<45
  3134.          ALANIM(AN,OP,Z,6)=1-ALANIM(AN,OP,Z,6)
  3135.       End If 
  3136.       If DX>47 and DX<51
  3137.          Pen GREEN
  3138.          Locate 0,31
  3139.          Input "(S)tore val, Add (R)andom val, (D)ecrement and branch:";A$
  3140.          A$=Upper$(A$)
  3141.          If A$="S"
  3142.             Locate 0,31
  3143.             Input "Value to store in counter (0-63): ";ALANIM(AN,OP,Z,7)
  3144.             Add ALANIM(AN,OP,Z,7),64
  3145.          Else If A$="R"
  3146.             Locate 0,31
  3147.             Input "Max. random value to add (0-63): ";ALANIM(AN,OP,Z,7)
  3148.             Add ALANIM(AN,OP,Z,7),128
  3149.          Else If A$="D"
  3150.             Locate 0,31
  3151.             Input "Frame to branch to when count reaches zero: ";ALANIM(AN,OP,Z,7)
  3152.             Add ALANIM(AN,OP,Z,7),192
  3153.          Else 
  3154.             ALANIM(AN,OP,Z,7)=0
  3155.          End If 
  3156.          
  3157.       End If 
  3158.       
  3159.       If DX>54 and DX<57
  3160.          
  3161.          NO=ALSTAT(AN,20) : Gosub OBDEFANIMSHOW
  3162.          Repeat : Until Mouse Click
  3163.          F=Y Screen(0,Y Mouse) : F=F/8
  3164.          ALANIM(AN,OP,Z,8)=F-1
  3165.          
  3166.       End If 
  3167.       
  3168.       If DX>59 and DX<64
  3169.          Pen GREEN : Locate 0,31 : Input "Horizontal offset of auxilliary frame: ";QAW
  3170.          ALANIM(AN,OP,Z,9)=QAW/2
  3171.       End If 
  3172.       
  3173.       If DX>66 and DX<72
  3174.          Pen GREEN : Locate 0,31 : Input "Vertical offset of auxilliary frame: ";QAW
  3175.          ALANIM(AN,OP,Z,10)=QAW/2
  3176.       End If 
  3177.       
  3178.    End If 
  3179.    
  3180. Until Y=31 and X>60
  3181.  
  3182. Y=0
  3183.  
  3184. Return 
  3185.  
  3186. SUBSETSHOW:
  3187. Cls 0 : Locate 0,0
  3188. Pen GREEN
  3189. Centre "Subsets of animation frames for "+ALNAME$(AN)
  3190.  
  3191. Pen RED
  3192. Locate 0,2
  3193. Centre "[ Front Facing Movement ]"
  3194. Locate 0,4
  3195. Centre "[ Front-Right Facing Movement ]"
  3196. Locate 0,6
  3197. Centre "[ Right Facing Movement ]"
  3198. Locate 0,8
  3199. Centre "[ Back-Right Facing Movement ]"
  3200. Locate 0,10
  3201. Centre "[ Back Facing Movement ]"
  3202. Locate 0,12
  3203. Centre "[ Back-Left Facing Movement ]"
  3204. Locate 0,14
  3205. Centre "[ Left-Facing Movement ]"
  3206. Locate 0,16
  3207. Centre "[ Front-Left Facing Movement ]"
  3208. Locate 0,18
  3209. Centre "[ Attacking Action ]"
  3210. Locate 0,20
  3211. Centre "[ Recieving Damage Action ]"
  3212. Locate 0,22
  3213. Centre "[ Dying Action ]"
  3214. Locate 0,29
  3215. Centre "[ Copy Action Animation Frames ]"
  3216. Locate 0,31
  3217. Centre "*** DONE ***"
  3218. Return 
  3219.  
  3220. DEFALIENVECTORANIM:
  3221.  
  3222. Repeat 
  3223.    Gosub VECTORSUBSETSHOW
  3224.    Repeat : Until Mouse Click<>0
  3225.    Y=Y Screen(0,Y Mouse)
  3226.    Y=Y/8
  3227.    If Y=2
  3228.       OP=0 : M$="Movement"
  3229.       Gosub DEFALANVEC
  3230.    End If 
  3231.    If Y=18
  3232.       OP=8 : M$="Attacking Action"
  3233.       Gosub DEFALANVEC
  3234.    End If 
  3235.    If Y=20
  3236.       OP=9 : M$="Recieving Damage Action"
  3237.       Gosub DEFALANVEC
  3238.    End If 
  3239.    If Y=22
  3240.       OP=10 : M$="Dying Action"
  3241.       Gosub DEFALANVEC
  3242.    End If 
  3243.    
  3244. Until Y=31
  3245.  
  3246. Y=0
  3247. Return 
  3248.  
  3249. VECTORSUBSETSHOW:
  3250. Cls 0 : Locate 0,0
  3251. Pen GREEN
  3252. Centre "Subsets of animation frames for "+ALNAME$(AN)
  3253.  
  3254. Pen RED
  3255. Locate 0,2
  3256. Centre "[ Movement ]"
  3257. Locate 0,18
  3258. Centre "[ Attacking Action ]"
  3259. Locate 0,20
  3260. Centre "[ Recieving Damage Action ]"
  3261. Locate 0,22
  3262. Centre "[ Dying Action ]"
  3263. Locate 0,31
  3264. Centre "*** DONE ***"
  3265. Return 
  3266.  
  3267.  
  3268. ALANIMVECSHOW:
  3269. Cls 0
  3270. Pen GREEN : Paper 0
  3271. Locate 0,0
  3272. A$="Vector Animation frames for "+ALNAME$(AN)+" "+M$
  3273. Centre A$
  3274. 'Locate 40,0 
  3275. 'Pen WHITE 
  3276. 'Print "Frame Width:"
  3277. 'Locate 53,0 
  3278. 'Pen RED 
  3279. 'Print Using "###";BFW(BULNUM) 
  3280. 'Locate 60,0 
  3281. 'Pen WHITE 
  3282. 'Print "Frame Height:" 
  3283. 'Locate 74,0 
  3284. 'Pen RED 
  3285. 'Print Using "###";BFH(BULNUM) 
  3286. A=-1
  3287. Repeat 
  3288.    Add A,1
  3289.    If ALANIM(AN,OP,A,0)>-1
  3290.       B=(A mod 30)+1
  3291.       C=(A/30)*40
  3292.       Locate C,B
  3293.       Pen WHITE
  3294.       Print Using "## ";A;
  3295.       Print "GF:";
  3296.       Pen RED
  3297.       Print Using "## ";ALANIM(AN,OP,A,0)+1;
  3298.       Pen WHITE
  3299.       Print "FN:";
  3300.       Pen RED
  3301.       Print Using "## ";ALANIM(AN,OP,A,1);
  3302.       Pen WHITE
  3303.       
  3304.       Print "AO:";
  3305.       Pen RED
  3306.       Print Using "####";(ALANIM(AN,OP,A,2)*256+ALANIM(AN,OP,A,3)) and 8190;
  3307.       
  3308.       Print "       ";
  3309.       Print "VO:";
  3310.       Pen RED
  3311.       Print Using "+## ";ALANIM(AN,OP,A,4);
  3312.       Pen WHITE
  3313.       Print "FX:";
  3314.       Pen RED
  3315.       Print Using "## ";ALANIM(AN,OP,A,5);
  3316.       Pen WHITE
  3317.       Print "AC:";
  3318.       Pen RED
  3319.       If ALANIM(AN,OP,A,6)=1
  3320.          Print " * ";
  3321.       Else 
  3322.          Print "   ";
  3323.       End If 
  3324.       Pen WHITE
  3325.       Print "AI:";
  3326.       Pen RED
  3327.       A7=ALANIM(AN,OP,A,7)
  3328.       If A7=0
  3329.          Print " v ";
  3330.       Else If A7/64=1
  3331.          Print "S"; Using "##";A7 and 63;
  3332.       Else If A7/64=2
  3333.          Print "R"; Using "##";A7 and 63;
  3334.       Else 
  3335.          Print "D"; Using "##";A7 and 63;
  3336.       End If 
  3337.       
  3338.       Pen WHITE
  3339.       Print "AUX:";
  3340.       Pen RED
  3341.       If ALANIM(AN,OP,A,8)>=0
  3342.          
  3343.          Print Using "##";ALANIM(AN,OP,A,8);
  3344.       Else 
  3345.          Print "  ";
  3346.       End If 
  3347.       
  3348.       Pen WHITE
  3349.       Print "XO:";
  3350.       Pen RED
  3351.       Print Using "+###";ALANIM(AN,OP,A,9)*2;
  3352.       Pen WHITE
  3353.       Print "YO:";
  3354.       Pen RED
  3355.       Print Using "+###";ALANIM(AN,OP,A,10)*2;
  3356.       
  3357.       
  3358.       Print 
  3359.    End If 
  3360. Until ALANIM(AN,OP,A,0)<0 or A=19
  3361. AMAX=A-1
  3362.  
  3363. Locate 0,31
  3364. Pen GREEN
  3365. Print " * ADD FRAME *  * DEL FRAME * ";
  3366. Locate 60,31
  3367. Pen RED
  3368. Print "*** DONE ***";
  3369.  
  3370. Return 
  3371.  
  3372.  
  3373. DEFALANVEC:
  3374.  
  3375. Repeat 
  3376.    Gosub ALANIMVECSHOW
  3377.    Repeat 
  3378.       MC=Mouse Click
  3379.       X=X Screen(0,X Mouse)/8
  3380.       Y=Y Screen(0,Y Mouse)/8
  3381.    Until MC<>0
  3382.    
  3383.    If Y=31
  3384.       If X<15
  3385.          If AMAX<19
  3386.             Add AMAX,1
  3387.             For J=0 To 10
  3388.                ALANIM(AN,OP,AMAX,J)=ALANIM(AN,OP,AMAX-1,J)
  3389.             Next 
  3390.          End If 
  3391.       Else 
  3392.          If X<30 and AMAX>0
  3393.             Add AMAX,-1
  3394.             ALANIM(AN,OP,AMAX+1,0)=-1
  3395.          End If 
  3396.       End If 
  3397.    End If 
  3398.    
  3399.    Z=(Y-1)
  3400.    DX=X-3
  3401.    
  3402.    If Y>0 and Y<=AMAX+1
  3403.       If DX>2 and DX<6
  3404.          Gosub PICKVECTORNAME
  3405.          ALANIM(AN,OP,Z,0)=Y-1
  3406.       End If 
  3407.       If DX>8 and DX<12
  3408.          Pen GREEN
  3409.          Locate 0,31 : Input "FRAME NUMBER :";ALANIM(AN,OP,Z,1);
  3410.       End If 
  3411.       If DX>14 and DX<19
  3412.          Locate 0,31 : Input "Facing Angle :";AL : ALANIM(AN,OP,Z,2)=(AL and 8190)/256
  3413.          ALANIM(AN,OP,Z,3)=AL and $FE
  3414.       End If 
  3415.       If DX>28 and DX<33
  3416.          Pen GREEN
  3417.          Locate 0,31 : Input "VERTICAL OFFSET:";ALANIM(AN,OP,Z,4);
  3418.       End If 
  3419.       If DX>35 and DX<39
  3420.          Gosub SFXNAMESHOW
  3421.          Gosub SFXNAMEPICK
  3422.          ALANIM(AN,OP,Z,5)=Y
  3423.       End If 
  3424.       If DX>41 and DX<45
  3425.          ALANIM(AN,OP,Z,6)=1-ALANIM(AN,OP,Z,6)
  3426.       End If 
  3427.       If DX>47 and DX<51
  3428.          Pen GREEN
  3429.          Locate 0,31
  3430.          Input "(S)tore val, Add (R)andom val, (D)ecrement and branch:";A$
  3431.          A$=Upper$(A$)
  3432.          If A$="S"
  3433.             Locate 0,31
  3434.             Input "Value to store in counter (0-63): ";ALANIM(AN,OP,Z,7)
  3435.             Add ALANIM(AN,OP,Z,7),64
  3436.          Else If A$="R"
  3437.             Locate 0,31
  3438.             Input "Max. random value to add (0-63): ";ALANIM(AN,OP,Z,7)
  3439.             Add ALANIM(AN,OP,Z,7),128
  3440.          Else If A$="D"
  3441.             Locate 0,31
  3442.             Input "Frame to branch to when count reaches zero: ";ALANIM(AN,OP,Z,7)
  3443.             Add ALANIM(AN,OP,Z,7),192
  3444.          Else 
  3445.             ALANIM(AN,OP,Z,7)=0
  3446.          End If 
  3447.          
  3448.       End If 
  3449.       If DX>55 and DX<58
  3450.          
  3451.          OB=ALSTAT(AN,20) : Gosub OBDEFANIMSHOW
  3452.          Repeat : Until Mouse Click
  3453.          F=Y Screen(0,Y Mouse) : F=F/8
  3454.          ALANIM(AN,OP,Z,8)=F-1
  3455.          
  3456.       End If 
  3457.       If DX>60 and DX<65
  3458.          Pen GREEN : Locate 0,31 : Input "Horizontal offset of auxilliary frame: ";QAW
  3459.          ALANIM(AN,OP,Z,9)=QAW/2
  3460.       End If 
  3461.       
  3462.       If DX>67 and DX<72
  3463.          Pen GREEN : Locate 0,31 : Input "Vertical offset of auxilliary frame: ";QAW
  3464.          ALANIM(AN,OP,Z,10)=QAW/2
  3465.       End If 
  3466.    End If 
  3467.    
  3468.    
  3469. Until Y=31 and X>60
  3470.  
  3471. Y=0
  3472.  
  3473. Return 
  3474.  
  3475.  
  3476.  
  3477. ALIENNAMESHOW:
  3478.  
  3479. Cls 0
  3480. Locate 0,0
  3481.  
  3482. Pen GREEN
  3483. Centre "Currently Defined Aliens:"
  3484. For A=0 To ALMAX
  3485.    Locate 0,A+1
  3486.    Pen WHITE : Print A;
  3487.    Pen GREEN
  3488.    Locate 4,
  3489.    Print ALNAME$(A);
  3490.    Locate 40,
  3491.    Pen RED
  3492.    Print "| Define characteristics     | Copy :-"
  3493. Next 
  3494.  
  3495. Locate 0,29 : Pen RED
  3496. Centre "[ Change Scale of Alien ]"
  3497.  
  3498. Locate 0,31 : Pen RED
  3499. Centre "*** DONE ***"
  3500.  
  3501. Return 
  3502.  
  3503. SETOBJNAME:
  3504.  
  3505. Menu Off 
  3506.  
  3507. Repeat 
  3508.    Gosub OBJNAMESHOW
  3509.    
  3510.    Repeat : MC=Mouse Click
  3511.    Until MC<>0
  3512.    Y=Y Screen(0,Y Mouse)/8
  3513.    X=X Screen(0,X Mouse)/8
  3514.    Y=Y-1
  3515.    
  3516.    If Y>=0 and Y<30
  3517.       If MC=1
  3518.          Locate 4,Y+1 : Pen RED : Input OBNAME$(Y)
  3519.       Else 
  3520.          Gosub SETOBJSTATS
  3521.       End If 
  3522.    End If 
  3523.    
  3524. Until Y=30
  3525.  
  3526. Cls 0
  3527. Menu On 
  3528.  
  3529. Return 
  3530.  
  3531. SETOBJSTATS:
  3532.  
  3533. NO=Y
  3534.  
  3535. Repeat 
  3536.    
  3537.    Gosub OBJSTATSHOW
  3538.    
  3539.    Repeat : MC=Mouse Click
  3540.    Until MC<>0
  3541.    
  3542.    Y=Y Screen(0,Y Mouse)/8
  3543.    If Y=1
  3544.       OBSTAT(NO,0)=(OBSTAT(NO,0)+1) and 3
  3545.    End If 
  3546.    
  3547.    If Y=2
  3548.       OBSTAT(NO,1)=(OBSTAT(NO,1)+1) mod 3
  3549.    End If 
  3550.    
  3551.    If Y=3 and OBSTAT(NO,0)=1
  3552.       
  3553.       Locate 40,3 : Pen RED
  3554.       Input OBSTAT(NO,2)
  3555.    End If 
  3556.    
  3557.    If Y=4 and OBSTAT(NO,0)=2
  3558.       Locate 40,4 : Pen RED
  3559.       Input OBSTAT(NO,3)
  3560.    End If 
  3561.    
  3562.    If Y=5 and OBSTAT(NO,0)=2
  3563.       Locate 40,5 : Pen RED
  3564.       Input OBSTAT(NO,4)
  3565.    End If 
  3566.    
  3567.    If Y=6 and OBSTAT(NO,0)>1
  3568.       Locate 40,6 : Pen RED
  3569.       OBSTAT(NO,5)=1-OBSTAT(NO,5)
  3570.    End If 
  3571.    
  3572.    If Y=7
  3573.       Gosub SETOBJDEFANIM
  3574.       Y=-1
  3575.    End If 
  3576.    
  3577.    If Y=8 and OBSTAT(NO,0)<>3
  3578.       Gosub SETOBJACTANIM
  3579.       Y=-1
  3580.    End If 
  3581.    
  3582.    If Y=11 and OBSTAT(NO,0)<>2 and OBSTAT(NO,0)<>3
  3583.       Gosub DEFAMMOGIVE : Y=-1
  3584.    End If 
  3585.    
  3586.    If Y=10 and OBSTAT(NO,0)<>2 and OBSTAT(NO,0)<>3
  3587.       Gosub DEFGUNGIVE : Y=-1
  3588.    End If 
  3589.    
  3590.    If Y=12
  3591.       Locate 40,12 : Pen RED : Input OBSTAT(NO,7)
  3592.    End If 
  3593.    
  3594.    If Y=13
  3595.       Locate 40,13 : Pen RED : Input O : OBSTAT(NO,8)=O/2
  3596.    End If 
  3597.    
  3598.    If Y=14
  3599.       OBSTAT(NO,9)=1-OBSTAT(NO,9)
  3600.    End If 
  3601.    
  3602.    If Y=15
  3603.       OBSTAT(NO,10)=1-OBSTAT(NO,10)
  3604.    End If 
  3605.    
  3606.    If Y=16
  3607.       
  3608.       Gosub SFXNAMESHOW
  3609.       Gosub SFXNAMEPICK
  3610.       OBSTAT(NO,12)=Y-1
  3611.       Y=-1
  3612.    End If 
  3613.    
  3614. Until Y=31
  3615.  
  3616. Return 
  3617.  
  3618. OBJSTATSHOW:
  3619.  
  3620. Cls 0
  3621. Locate 0,0
  3622. Pen GREEN
  3623. Centre "Characteristics of object type: "+OBNAME$(NO)
  3624. Locate 0,1
  3625. Pen WHITE
  3626. Print "Behaviour of object: "
  3627. Pen RED
  3628. Locate 40,1
  3629. If OBSTAT(NO,0)=0
  3630.    Print "Collectable "
  3631. End If 
  3632. If OBSTAT(NO,0)=1
  3633.    Print "Activatable "
  3634. End If 
  3635. If OBSTAT(NO,0)=2
  3636.    Print "Destructable"
  3637. End If 
  3638. If OBSTAT(NO,0)=3
  3639.    Print "Decoration  "
  3640. End If 
  3641.  
  3642. Locate 0,2
  3643. Pen WHITE
  3644. Print "Graphic type: "
  3645. Pen RED
  3646. Locate 40,2
  3647. If OBSTAT(NO,1)=0
  3648.    Print "Bitmap "
  3649. Else 
  3650.    If OBSTAT(NO,1)=1
  3651.       Print "Polygon"
  3652.    Else 
  3653.       Print "Glare/Smoke"
  3654.    End If 
  3655. End If 
  3656.  
  3657. If OBSTAT(NO,0)=1
  3658.    Locate 0,3
  3659.    Pen WHITE
  3660.    Print "Deactivate after (50ths/sec, -1=Never):"
  3661.    Locate 40,3
  3662.    Pen RED
  3663.    If OBSTAT(NO,2)<>-1
  3664.       Print OBSTAT(NO,2)
  3665.    Else 
  3666.       Print "Never"
  3667.    End If 
  3668. End If 
  3669.  
  3670. If OBSTAT(NO,0)=2
  3671.    Locate 0,4
  3672.    Pen WHITE
  3673.    Print "Number of hit points: "
  3674.    Locate 40,4
  3675.    Pen RED
  3676.    Print OBSTAT(NO,3)
  3677.    Locate 0,5
  3678.    Pen WHITE
  3679.    Print "Explosive potential:"
  3680.    Locate 40,5
  3681.    Pen RED
  3682.    Print OBSTAT(NO,4)
  3683. End If 
  3684.  
  3685. If OBSTAT(NO,0)<>0 and OBSTAT(NO,0)<>1
  3686.    Locate 0,6
  3687.    Pen WHITE
  3688.    Print "Impassable in default state (Y/N):"
  3689.    Locate 40,6
  3690.    Pen RED
  3691.    If OBSTAT(NO,5)=0
  3692.       Print "No"
  3693.    Else 
  3694.       Print "Yes"
  3695.    End If 
  3696. End If 
  3697.  
  3698. Pen RED
  3699. Locate 0,7
  3700. Centre "[ Define default state animation ]"
  3701. Locate 0,8
  3702. If OBSTAT(NO,0)<>3
  3703.    Centre "[ Define active/destroyed animation ]"
  3704. End If 
  3705.  
  3706. If OBSTAT(NO,0)=0 or OBSTAT(NO,0)=1
  3707.    Pen WHITE : Locate 0,9
  3708.    Print "Upon collection/activation, give player:-"
  3709.    Pen RED : Locate 0,10
  3710.    Centre "[ Define Guns/JetPack/Shield Given ]"
  3711.    Locate 0,11
  3712.    Centre "[ Define Ammo/Fuel Given ]"
  3713. End If 
  3714.  
  3715. Locate 0,12 : Pen WHITE
  3716. Print "Collision cylinder radius:"
  3717. Locate 40,12 : Pen RED
  3718. Print OBSTAT(NO,7)
  3719. Locate 0,13 : Pen WHITE
  3720. Print "Collision cylinder height:"
  3721. Locate 40,13 : Pen RED
  3722. Print OBSTAT(NO,8)*2
  3723.  
  3724. Locate 0,14 : Pen WHITE
  3725. Print "Position vertically relative to: ";
  3726. Locate 40,14 : Pen RED
  3727. If OBSTAT(NO,9)=0
  3728.    Print "FLOOR"
  3729. Else 
  3730.    Print "CEILING"
  3731. End If 
  3732.  
  3733. Locate 0,15 : Pen WHITE
  3734. Print "Lock to nearest wall? ";
  3735. Locate 40,15 : Pen RED
  3736. YESNO[OBSTAT(NO,10)]
  3737.  
  3738. Locate 0,16 : Pen WHITE
  3739. If OBSTAT(NO,0)<>3
  3740.    If OBSTAT(NO,0)=0
  3741.       Print "Collection Sound Effect ";
  3742.    Else If OBSTAT(NO,0)=1
  3743.       Print "Activation Sound Effect ";
  3744.    Else 
  3745.       Print "Destruction Sound Effect ";
  3746.    End If 
  3747.    Locate 40,
  3748.    Pen RED
  3749.    If OBSTAT(NO,12)>=0
  3750.       Print SFX$(OBSTAT(NO,12))
  3751.    Else 
  3752.       Print "None."
  3753.    End If 
  3754. End If 
  3755.  
  3756. Locate 0,31 : Pen RED : Centre "*** DONE ***"
  3757.  
  3758. Return 
  3759.  
  3760.  
  3761. DEFAMMOGIVE:
  3762.  
  3763. Repeat 
  3764.    Gosub AMMOGIVESHOW
  3765.    Repeat : Until Mouse Click<>0
  3766.    Y=Y Screen(0,Y Mouse)/8
  3767.    
  3768.    If Y>0 and Y<23
  3769.       
  3770.       Locate 40,Y : Pen RED : Input AMMOGIVE(NO,Y-1)
  3771.       
  3772.    End If 
  3773. Until Y=31
  3774.  
  3775. Y=0
  3776. Return 
  3777.  
  3778. AMMOGIVESHOW:
  3779. Cls 0
  3780. Locate 0,0 : Pen GREEN
  3781. Centre "Quantity given by "+OBNAME$(NO)+" when collected:"
  3782. Locate 0,1 : Pen WHITE
  3783. Print "Health:"
  3784. Locate 40,1 : Pen RED
  3785. Print AMMOGIVE(NO,0)
  3786. Locate 0,2 : Pen WHITE
  3787. Print "Jetpack Fuel:"
  3788. Locate 40,2 : Pen RED
  3789. Print AMMOGIVE(NO,1)
  3790. For A=0 To 19
  3791.    Locate 0,A+3
  3792.    Pen WHITE
  3793.    Print "Ammo Type: ";BULNAME$(A);
  3794.    Locate 40,
  3795.    Pen RED
  3796.    Print AMMOGIVE(NO,A+2)
  3797. Next 
  3798. Locate 0,31 : Pen RED : Centre "*** DONE ***"
  3799.  
  3800. Return 
  3801.  
  3802. DEFGUNGIVE:
  3803.  
  3804. Repeat 
  3805.    Gosub GUNGIVESHOW
  3806.    Repeat : Until Mouse Click<>0
  3807.    Y=Y Screen(0,Y Mouse)/8
  3808.    
  3809.    If Y>0 and Y<13
  3810.       
  3811.       Locate 40,Y : GUNGIVE(NO,Y-1)=1-GUNGIVE(NO,Y-1)
  3812.       
  3813.    End If 
  3814. Until Y=31
  3815. Y=0
  3816. Return 
  3817.  
  3818. Procedure YESNO[V]
  3819.    If V=0 Then Print "No" Else Print "Yes"
  3820. End Proc
  3821.  
  3822. GUNGIVESHOW:
  3823. Cls 0
  3824. Locate 0,0 : Pen GREEN
  3825. Centre "Quantity given by "+OBNAME$(NO)+" when collected:"
  3826. Locate 0,1 : Pen WHITE
  3827. Print "Shield:"
  3828. Locate 40,1 : Pen RED
  3829. YESNO[GUNGIVE(NO,0)]
  3830. Locate 0,2 : Pen WHITE
  3831. Print "Jetpack:"
  3832. Locate 40,2 : Pen RED
  3833. YESNO[GUNGIVE(NO,1)]
  3834. For A=0 To 9
  3835.    Locate 0,A+3
  3836.    Pen WHITE
  3837.    Print "Gun Type: ";GUNNAME$(A);
  3838.    Locate 40,
  3839.    Pen RED
  3840.    YESNO[GUNGIVE(NO,A+2)]
  3841. Next 
  3842. Locate 0,31 : Pen RED : Centre "*** DONE ***"
  3843.  
  3844. Return 
  3845.  
  3846. OBJNAMESHOW:
  3847.  
  3848. Cls 0
  3849. Locate 0,0
  3850.  
  3851. Pen GREEN
  3852. Centre "Currently Defined Objects:"
  3853. For A=0 To 29
  3854.    Locate 0,A+1
  3855.    Pen WHITE : Print A;
  3856.    Pen GREEN
  3857.    Locate 4,
  3858.    Print OBNAME$(A);
  3859. Next 
  3860.  
  3861. Pen RED : Locate 0,31
  3862. Centre "*** DONE ***"
  3863.  
  3864. Return 
  3865.  
  3866. SETOBJDEFANIM:
  3867. If OBSTAT(NO,1)<>1
  3868.    Gosub SETDEFBITMAPANIM
  3869. Else 
  3870.    Gosub SETDEFPOLYANIM
  3871. End If 
  3872. Return 
  3873.  
  3874. SETOBJACTANIM:
  3875. If OBSTAT(NO,1)<>1
  3876.    Gosub SETACTBITMAPANIM
  3877. Else 
  3878.    Gosub SETACTPOLYANIM
  3879. End If 
  3880. Return 
  3881.  
  3882. SETDEFBITMAPANIM:
  3883.  
  3884. Repeat 
  3885.    Gosub OBDEFANIMSHOW
  3886.    Repeat 
  3887.       MC=Mouse Click
  3888.    Until MC<>0
  3889.    X=X Screen(0,X Mouse)/8
  3890.    Y=Y Screen(0,Y Mouse)/8
  3891.    
  3892.    If Y=31
  3893.       If X<15
  3894.          OBSTAT(NO,6)=Min(OBSTAT(NO,6)+1,19)
  3895.          For J=0 To 4
  3896.             OBDEFAF(NO,OBSTAT(NO,6),J)=OBDEFAF(NO,OBSTAT(NO,6)-1,J)
  3897.             OBDEFAF(NO,OBSTAT(NO,6)-1,5)=OBSTAT(NO,6)
  3898.             OBDEFAF(NO,OBSTAT(NO,6),5)=OBSTAT(NO,6)
  3899.          Next 
  3900.       Else 
  3901.          If X<30
  3902.             OBSTAT(NO,6)=Max(OBSTAT(NO,6)-1,0)
  3903.             For Q=0 To OBSTAT(NO,6)
  3904.                If OBDEFAF(NO,Q,5)=OBSTAT(NO,6)+1
  3905.                   OBDEFAF(NO,Q,5)=OBSTAT(NO,6)
  3906.                End If 
  3907.             Next 
  3908.          End If 
  3909.       End If 
  3910.    End If 
  3911.    
  3912.    Z=(Y-1)
  3913.    '+(X/40)*30
  3914.    DX=X
  3915.    'mod 40
  3916.    
  3917.    If Y>0 and Y<=OBSTAT(NO,6)+1
  3918.       If DX>6 and DX<10
  3919.          Gosub PICKOBJGRAPHNAME
  3920.          OBDEFAF(NO,Z,0)=Y-1
  3921.       End If 
  3922.       If DX>12 and DX<16
  3923.          If MC=2
  3924.             FRAMEPICK[OBDEFAF(NO,Z,0),OBDEFAF(NO,Z,1)+1]
  3925.             OBDEFAF(NO,Z,1)=Param-1
  3926.             Gosub OBDEFANIMSHOW
  3927.          Else 
  3928.             Pen GREEN
  3929.             Locate 0,31 : Input "FRAME NUMBER :";O : OBDEFAF(NO,Z,1)=O-1
  3930.          End If 
  3931.       End If 
  3932.       If DX>18 and DX<23
  3933.          Pen GREEN
  3934.          Locate 0,31 : Input "SCALED WIDTH :";OBDEFAF(NO,Z,2);
  3935.       End If 
  3936.       If DX>25 and DX<30
  3937.          Pen GREEN
  3938.          Locate 0,31 : Input "SCALED HEIGHT :";OBDEFAF(NO,Z,3);
  3939.       End If 
  3940.       If DX>32 and DX<37
  3941.          Pen GREEN
  3942.          Locate 0,31 : Input "VERTICAL OFFSET:";O; : OBDEFAF(NO,Z,4)=O/2
  3943.       End If 
  3944.       If DX>39
  3945.          Pen GREEN : Locate 0,31 : Print "SELECT NEXT FRAME:-       ";
  3946.          Repeat 
  3947.          Until Mouse Click
  3948.          NS=Y Screen(0,Y Mouse)/8
  3949.          If NS>0 and NS<=OBSTAT(NO,6)+1
  3950.             OBDEFAF(NO,Z,5)=NS-1
  3951.          End If 
  3952.       End If 
  3953.    End If 
  3954.    
  3955. Until Y=31 and X>60
  3956.  
  3957. Return 
  3958.  
  3959. OBDEFANIMSHOW:
  3960. Cls 0
  3961. Pen GREEN : Paper 0
  3962. Locate 0,0
  3963. A$="Default Animation Frames for "+OBNAME$(NO)
  3964. Print A$
  3965.  
  3966. For A=0 To OBSTAT(NO,6)
  3967.    B=(A mod 30)+1
  3968.    C=(A/30)*40
  3969.    Locate C,B
  3970.    Pen WHITE
  3971.    Print Using "## ";A;
  3972.    Print "GF:";
  3973.    Pen RED
  3974.    Print Using "## ";OBDEFAF(NO,A,0)+1;
  3975.    Pen WHITE
  3976.    Print "FN:";
  3977.    Pen RED
  3978.    Print Using "## ";OBDEFAF(NO,A,1)+1;
  3979.    Pen WHITE
  3980.    Print "SW:";
  3981.    Pen RED
  3982.    Print Using "### ";OBDEFAF(NO,A,2);
  3983.    Pen WHITE
  3984.    Print "SH:";
  3985.    Pen RED
  3986.    Print Using "### ";OBDEFAF(NO,A,3);
  3987.    Pen WHITE
  3988.    Print "VO:";
  3989.    Pen RED
  3990.    Print Using "+### ";OBDEFAF(NO,A,4)*2;
  3991.    Pen WHITE
  3992.    Print "NF:";
  3993.    Pen RED
  3994.    Print Using "## ";OBDEFAF(NO,A,5);
  3995.    Print 
  3996. Next 
  3997.  
  3998. Locate 0,31
  3999. Pen GREEN
  4000. Print " * ADD FRAME *  * DEL FRAME * ";
  4001. Locate 60,31
  4002. Pen RED
  4003. Print "*** DONE ***";
  4004. Return 
  4005.  
  4006. SETDEFPOLYANIM:
  4007.  
  4008. Repeat 
  4009.    Gosub OBDEFPOLYANIMSHOW
  4010.    Repeat 
  4011.       MC=Mouse Click
  4012.    Until MC<>0
  4013.    X=X Screen(0,X Mouse)/8
  4014.    Y=Y Screen(0,Y Mouse)/8
  4015.    
  4016.    If Y=31
  4017.       If X<15
  4018.          OBSTAT(NO,6)=Min(OBSTAT(NO,6)+1,19)
  4019.          For J=0 To 4
  4020.             OBDEFAF(NO,OBSTAT(NO,6),J)=OBDEFAF(NO,OBSTAT(NO,6)-1,J)
  4021.             OBDEFAF(NO,OBSTAT(NO,6)-1,5)=OBSTAT(NO,6)
  4022.             OBDEFAF(NO,OBSTAT(NO,6),5)=OBSTAT(NO,6)
  4023.          Next 
  4024.       Else 
  4025.          If X<30
  4026.             OBSTAT(NO,6)=Max(OBSTAT(NO,6)-1,0)
  4027.             For Q=0 To OBSTAT(NO,6)
  4028.                If OBDEFAF(NO,Q,5)=OBSTAT(NO,6)+1
  4029.                   OBDEFAF(NO,Q,5)=OBSTAT(NO,6)
  4030.                End If 
  4031.             Next 
  4032.          End If 
  4033.       End If 
  4034.    End If 
  4035.    
  4036.    Z=(Y-1)
  4037.    '+(X/40)*30
  4038.    DX=X
  4039.    ' mod 40 
  4040.    
  4041.    If Y>0 and Y<31
  4042.       If DX>3 and DX<7
  4043.          Gosub PICKVECTORNAME
  4044.          OBDEFAF(NO,Z,0)=Y-1
  4045.       End If 
  4046.       If DX>9 and DX<13
  4047.          '         If MC=2
  4048.          '            FRAMEPICK[OBDEFAF(NO,Z,0),OBDEFAF(NO,Z,1)]
  4049.          '            OBDEFAF(NO,Z,1)=Param 
  4050.          '            Gosub OBDEFANIMSHOW 
  4051.          '         Else 
  4052.          Pen GREEN
  4053.          Locate 0,31 : Input "FRAME NUMBER :";O : OBDEFAF(NO,Z,1)=O-1
  4054.          '         End If 
  4055.       End If 
  4056.       If DX>15 and DX<20
  4057.          Pen GREEN
  4058.          Locate 0,31 : Input "ANGLE OFFSET (8192=360 deg) :";ANGL
  4059.          OBDEFAF(NO,Z,2)=ANGL/256
  4060.          OBDEFAF(NO,Z,3)=ANGL and 255
  4061.       End If 
  4062.       '      If DX>22 and DX<27
  4063.       '         Pen GREEN
  4064.       '         Locate 0,31 : Input "SCALED HEIGHT :";OBDEFAF(NO,Z,3); 
  4065.       '      End If  
  4066.       If DX>31 and DX<36
  4067.          Pen GREEN
  4068.          Locate 0,31 : Input "VERTICAL OFFSET:";O; : OBDEFAF(NO,Z,4)=O/2
  4069.       End If 
  4070.       If DX>39
  4071.          Pen GREEN : Locate 0,31 : Print "SELECT NEXT FRAME:-       ";
  4072.          Repeat 
  4073.          Until Mouse Click
  4074.          NS=Y Screen(0,Y Mouse)/8
  4075.          If NS>0 and NS<=OBSTAT(NO,6)+1
  4076.             OBDEFAF(NO,Z,5)=NS-1
  4077.          End If 
  4078.       End If 
  4079.    End If 
  4080.    
  4081. Until Y=31 and X>60
  4082.  
  4083. Return 
  4084.  
  4085. OBDEFPOLYANIMSHOW:
  4086. Cls 0
  4087. Pen GREEN : Paper 0
  4088. Locate 0,0
  4089. A$="Default Vector Animation Frames for "+OBNAME$(NO)
  4090. Print A$
  4091.  
  4092. For A=0 To OBSTAT(NO,6)
  4093.    B=(A mod 30)+1
  4094.    C=(A/30)*40
  4095.    Locate C,B
  4096.    Pen GREEN
  4097.    Print Using "##";A;
  4098.    
  4099.    Pen WHITE
  4100.    Print "VF:";
  4101.    Pen RED
  4102.    Print Using "## ";OBDEFAF(NO,A,0)+1;
  4103.    Pen WHITE
  4104.    Print "FN:";
  4105.    Pen RED
  4106.    Print Using "## ";OBDEFAF(NO,A,1)+1;
  4107.    Pen WHITE
  4108.    Print "AO:";
  4109.    Pen RED
  4110.    Print Using "####";OBDEFAF(NO,A,2)*256+OBDEFAF(NO,A,3);
  4111.    Pen WHITE
  4112.    Print "   ";
  4113.    Pen RED
  4114.    'Print Using "### ";OBDEFAF(NO,A,3); 
  4115.    Print "    ";
  4116.    Pen WHITE
  4117.    Print "VO:";
  4118.    Pen RED
  4119.    Print Using "+### ";OBDEFAF(NO,A,4)*2;
  4120.    Pen WHITE
  4121.    Print "NF:";
  4122.    Pen RED
  4123.    Print Using "## ";OBDEFAF(NO,A,5);
  4124.    Print 
  4125. Next 
  4126.  
  4127. Locate 0,31
  4128. Pen GREEN
  4129. Print " * ADD FRAME *  * DEL FRAME * ";
  4130. Locate 60,31
  4131. Pen RED
  4132. Print "*** DONE ***";
  4133. Return 
  4134.  
  4135. SETACTBITMAPANIM:
  4136. Repeat 
  4137.    Gosub OBACTANIMSHOW
  4138.    Repeat 
  4139.       MC=Mouse Click
  4140.    Until MC<>0
  4141.    X=X Screen(0,X Mouse)/8
  4142.    Y=Y Screen(0,Y Mouse)/8
  4143.    
  4144.    If Y=31
  4145.       If X<15
  4146.          OBSTAT(NO,6)=Min(OBSTAT(NO,6)+1,19)
  4147.          For J=0 To 4
  4148.             OBDEFAF(NO,OBSTAT(NO,6),J)=OBDEFAF(NO,OBSTAT(NO,6)-1,J)
  4149.             OBDEFAF(NO,OBSTAT(NO,6)-1,5)=OBSTAT(NO,6)
  4150.             OBDEFAF(NO,OBSTAT(NO,6),5)=OBSTAT(NO,6)
  4151.          Next 
  4152.       Else 
  4153.          If X<30
  4154.             OBSTAT(NO,6)=Max(OBSTAT(NO,6)-1,0)
  4155.             For Q=0 To OBSTAT(NO,6)
  4156.                If OBDEFAF(NO,Q,5)=OBSTAT(NO,6)+1
  4157.                   OBDEFAF(NO,Q,5)=OBSTAT(NO,6)
  4158.                End If 
  4159.             Next 
  4160.          End If 
  4161.       End If 
  4162.    End If 
  4163.    
  4164.    Z=(Y-1)
  4165.    '+(X/40)*30
  4166.    DX=X
  4167.    ' mod 40 
  4168.    
  4169.    If Y>0 and Y<31
  4170.       If DX>3 and DX<7
  4171.          Gosub PICKOBJGRAPHNAME
  4172.          OBACTAF(NO,Z,0)=Y-1
  4173.       End If 
  4174.       If DX>9 and DX<13
  4175.          If MC=2
  4176.             FRAMEPICK[OBACTAF(NO,Z,0),OBACTAF(NO,Z,1)+1]
  4177.             OBACTAF(NO,Z,1)=Param-1
  4178.             Gosub OBDEFANIMSHOW
  4179.          Else 
  4180.             Pen GREEN
  4181.             Locate 0,31 : Input "FRAME NUMBER :";O : OBACTAF(NO,Z,1)=O-1
  4182.          End If 
  4183.       End If 
  4184.       If DX>15 and DX<20
  4185.          Pen GREEN
  4186.          Locate 0,31 : Input "SCALED WIDTH :";OBACTAF(NO,Z,2);
  4187.       End If 
  4188.       If DX>22 and DX<27
  4189.          Pen GREEN
  4190.          Locate 0,31 : Input "SCALED HEIGHT :";OBACTAF(NO,Z,3);
  4191.       End If 
  4192.       If DX>29 and DX<34
  4193.          Pen GREEN
  4194.          Locate 0,31 : Input "VERTICAL OFFSET:";O; : OBACTAF(NO,Z,4)=O/2
  4195.       End If 
  4196.       If DX>39
  4197.          Pen GREEN : Locate 0,31 : Print "SELECT NEXT FRAME:-       ";
  4198.          Repeat 
  4199.          Until Mouse Click
  4200.          NS=Y Screen(0,Y Mouse)/8
  4201.          If NS>0 and NS<=OBSTAT(NO,6)+1
  4202.             OBDEFAF(NO,Z,5)=NS-1
  4203.          End If 
  4204.       End If 
  4205.    End If 
  4206.    
  4207. Until Y=31 and X>60
  4208. Return 
  4209.  
  4210. OBACTANIMSHOW:
  4211. Cls 0
  4212. Pen GREEN : Paper 0
  4213. Locate 0,0
  4214. A$="Activated Animation Frames for "+OBNAME$(NO)
  4215. Print A$
  4216.  
  4217. For A=0 To OBSTAT(NO,11)
  4218.    B=(A mod 30)+1
  4219.    C=(A/30)*40
  4220.    Locate C,B
  4221.    Pen WHITE
  4222.    Print "GF:";
  4223.    Pen RED
  4224.    Print Using "## ";OBACTAF(NO,A,0)+1;
  4225.    Pen WHITE
  4226.    Print "FN:";
  4227.    Pen RED
  4228.    Print Using "## ";OBACTAF(NO,A,1)+1;
  4229.    Pen WHITE
  4230.    Print "SW:";
  4231.    Pen RED
  4232.    Print Using "### ";OBACTAF(NO,A,2);
  4233.    Pen WHITE
  4234.    Print "SH:";
  4235.    Pen RED
  4236.    Print Using "### ";OBACTAF(NO,A,3);
  4237.    Pen WHITE
  4238.    Print "VO:";
  4239.    Pen RED
  4240.    Print Using "+### ";OBACTAF(NO,A,4)*2;
  4241.    Pen WHITE
  4242.    Print "NF:";
  4243.    Pen RED
  4244.    Print Using "## ";OBDEFAF(NO,A,5);
  4245.    Print 
  4246. Next 
  4247.  
  4248. Locate 0,31
  4249. Pen GREEN
  4250. Print " * ADD FRAME *  * DEL FRAME * ";
  4251. Locate 60,31
  4252. Pen RED
  4253. Print "*** DONE ***";
  4254. Return 
  4255.  
  4256. SETACTPOLYANIM:
  4257.  
  4258. Repeat 
  4259.    Gosub OBACTPOLYANIMSHOW
  4260.    Repeat 
  4261.       MC=Mouse Click
  4262.    Until MC<>0
  4263.    X=X Screen(0,X Mouse)/8
  4264.    Y=Y Screen(0,Y Mouse)/8
  4265.    
  4266.    If Y=31
  4267.       If X<15
  4268.          OBSTAT(NO,11)=Min(OBSTAT(NO,11)+1,19)
  4269.          For J=0 To 4
  4270.             OBACTAF(NO,OBSTAT(NO,11),J)=OBACTAF(NO,OBSTAT(NO,11)-1,J)
  4271.             OBACTAF(NO,OBSTAT(NO,11)-1,5)=OBSTAT(NO,11)
  4272.             OBACTAF(NO,OBSTAT(NO,11),5)=OBSTAT(NO,11)
  4273.          Next 
  4274.       Else 
  4275.          If X<30
  4276.             OBSTAT(NO,11)=Max(OBSTAT(NO,11)-1,0)
  4277.             For Q=0 To OBSTAT(NO,11)
  4278.                If OBACTAF(NO,Q,5)=OBSTAT(NO,11)+1
  4279.                   OBACTAF(NO,Q,5)=OBSTAT(NO,11)
  4280.                End If 
  4281.             Next 
  4282.          End If 
  4283.       End If 
  4284.    End If 
  4285.    
  4286.    Z=(Y-1)
  4287.    '+(X/40)*30
  4288.    DX=X
  4289.    ' mod 40 
  4290.    
  4291.    If Y>0 and Y<31
  4292.       If DX>3 and DX<7
  4293.          Gosub PICKVECTORNAME
  4294.          OBACTAF(NO,Z,0)=Y-1
  4295.       End If 
  4296.       If DX>9 and DX<13
  4297.          '         If MC=2
  4298.          '            FRAMEPICK[OBactAF(NO,Z,0),OBactAF(NO,Z,1)]
  4299.          '            OBactAF(NO,Z,1)=Param 
  4300.          '            Gosub OBactANIMSHOW 
  4301.          '         Else 
  4302.          Pen GREEN
  4303.          Locate 0,31 : Input "FRAME NUMBER :";O : OBACTAF(NO,Z,1)=O-1
  4304.          '         End If 
  4305.       End If 
  4306.       If DX>15 and DX<20
  4307.          Pen GREEN
  4308.          Locate 0,31 : Input "ANGLE OFFSET (8192=360 deg) :";ANGL
  4309.          OBACTAF(NO,Z,2)=ANGL/256
  4310.          OBACTAF(NO,Z,3)=ANGL and 255
  4311.       End If 
  4312.       '         If DX>22 and DX<27 
  4313.       '         Pen GREEN
  4314.       '         Locate 0,31 : Input "SCALED HEIGHT :";OBACTAF(NO,Z,3); 
  4315.       '      End If  
  4316.       If DX>29 and DX<34
  4317.          Pen GREEN
  4318.          Locate 0,31 : Input "VERTICAL OFFSET:";O; : OBACTAF(NO,Z,4)=O/2
  4319.       End If 
  4320.       If DX>39
  4321.          Pen GREEN : Locate 0,31 : Print "SELECT NEXT FRAME:-       ";
  4322.          Repeat 
  4323.          Until Mouse Click
  4324.          NS=Y Screen(0,Y Mouse)/8
  4325.          If NS>0 and NS<=OBSTAT(NO,11)+1
  4326.             OBACTAF(NO,Z,5)=NS-1
  4327.          End If 
  4328.       End If 
  4329.    End If 
  4330.    
  4331. Until Y=31 and X>60
  4332.  
  4333. Return 
  4334.  
  4335. OBACTPOLYANIMSHOW:
  4336. Cls 0
  4337. Pen GREEN : Paper 0
  4338. Locate 0,0
  4339. A$="Activated Vector Animation Frames for "+OBNAME$(NO)
  4340. Print A$
  4341.  
  4342. For A=0 To OBSTAT(NO,11)
  4343.    B=(A mod 30)+1
  4344.    C=(A/30)*40
  4345.    Locate C,B
  4346.    Pen WHITE
  4347.    Print "VF:";
  4348.    Pen RED
  4349.    Print Using "## ";OBACTAF(NO,A,0)+1;
  4350.    Pen WHITE
  4351.    Print "FN:";
  4352.    Pen RED
  4353.    Print Using "## ";OBACTAF(NO,A,1)+1;
  4354.    Pen WHITE
  4355.    Print "AO:";
  4356.    Pen RED
  4357.    Print Using "####";OBACTAF(NO,A,2)*256+OBACTAF(NO,A,3);
  4358.    Pen WHITE
  4359.    Print "   ";
  4360.    Pen RED
  4361.    'Print Using "### ";OBactAF(NO,A,3); 
  4362.    Print "    ";
  4363.    Pen WHITE
  4364.    Print "VO:";
  4365.    Pen RED
  4366.    Print Using "+### ";OBACTAF(NO,A,4)*2;
  4367.    Pen WHITE
  4368.    Print "NF:";
  4369.    Pen RED
  4370.    Print Using "## ";OBACTAF(NO,A,5);
  4371.    Print 
  4372. Next 
  4373.  
  4374. Locate 0,31
  4375. Pen GREEN
  4376. Print " * ADD FRAME *  * DEL FRAME * ";
  4377. Locate 60,31
  4378. Pen RED
  4379. Print "*** DONE ***";
  4380. Return